public static function hash($object, $algoOrCtx = 'md5', $raw = FALSE)
	{
		if (is_string($algoOrCtx)) {
			$ctx = hash_init($algoOrCtx);
		} else {
			$ctx = $algoOrCtx;
		}

		if (isset($object->fileToGenerate)) {
			hash_update($ctx, 'fileToGenerate');
			foreach ($object->fileToGenerate instanceof \Traversable ? $object->fileToGenerate : (array)$object->fileToGenerate as $v0) {
				hash_update($ctx, (string)$v0);
			}
		}

		if (isset($object->parameter)) {
			hash_update($ctx, 'parameter');
			hash_update($ctx, (string)$object->parameter);
		}

		if (isset($object->protoFile)) {
			hash_update($ctx, 'protoFile');
			foreach ($object->protoFile instanceof \Traversable ? $object->protoFile : (array)$object->protoFile as $v0) {
				FileDescriptorProtoMeta::hash($v0, $ctx);
			}
		}

		if (is_string($algoOrCtx)) {
			return hash_final($ctx, $raw);
		} else {
			return null;
		}
	}