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

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

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

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

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

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

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