Shader broke after update from 5.4 to 5.5

I checked the update guide and didn’t find anything but i don’t know much about shaders.

The problem right now is that the shader turns the object completely invisible instead of showing a colored outline.

http://wiki.unity3d.com/index.php/Silhouette-Outlined_Diffuse

Shader "Outlined/Silhouette Only" {
	Properties {
		_OutlineColor ("Outline Color", Color) = (0,0,0,1)
		_Outline ("Outline width", Range (0.0, 0.03)) = .005
	}
 
CGINCLUDE
#include "UnityCG.cginc"
 
struct appdata {
	float4 vertex : POSITION;
	float3 normal : NORMAL;
};
 
struct v2f {
	float4 pos : POSITION;
	float4 color : COLOR;
};
 
uniform float _Outline;
uniform float4 _OutlineColor;
 
v2f vert(appdata v) {
	// just make a copy of incoming vertex data but scaled according to normal direction
	v2f o;
	o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
 
	float3 norm   = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal);
	float2 offset = TransformViewToProjection(norm.xy);
 
	o.pos.xy += offset * o.pos.z * _Outline;
	o.color = _OutlineColor;
	return o;
}
ENDCG
 
	SubShader {
		Tags { "Queue" = "Transparent" }
 
		Pass {
			Name "BASE"
			Cull Back
			Blend Zero One
 
			// uncomment this to hide inner details:
			//Offset -8, -8
 
			SetTexture [_OutlineColor] {
				ConstantColor (0,0,0,0)
				Combine constant
			}
		}
 
		// note that a vertex shader is specified here but its using the one above
		Pass {
			Name "OUTLINE"
			Tags { "LightMode" = "Always" }
			Cull Front
 
			// you can choose what kind of blending mode you want for the outline
			//Blend SrcAlpha OneMinusSrcAlpha // Normal
			//Blend One One // Additive
			Blend One OneMinusDstColor // Soft Additive
			//Blend DstColor Zero // Multiplicative
			//Blend DstColor SrcColor // 2x Multiplicative
 
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
 
half4 frag(v2f i) :COLOR {
	return i.color;
}
ENDCG
		}
 
 
	}
 
	Fallback "Diffuse"


}

Replace the fixed function shader by removing:

         SetTexture [_OutlineColor] {
             ConstantColor (0,0,0,0)
             Combine constant
         }

and replacing with:

	CGPROGRAM
		#pragma vertex vert1
		#pragma fragment frag1

		v2f vert1(appdata v) {
			v2f o;
			o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
			return o;
		}

		half4 frag1(v2f i) :COLOR{
			return half4(1,1,1,1);
		}
	ENDCG

You need to change this line:

o.pos.xy += offset * o.pos.z * _Outline;

to:

#ifdef UNITY_Z_0_FAR_FROM_CLIPSPACE
    float z = UNITY_Z_0_FAR_FROM_CLIPSPACE(o.pos.z); 
#else
    float z = o.pos.z;
#endif
o.pos.xy += offset * z * _Outline;

This is due to the z depth being reversed on Unity 5.5.