diff --git a/cmake/onnxruntime_providers.cmake b/cmake/onnxruntime_providers.cmake index d4d1fd73a65a..d15fa9b8ad1a 100644 --- a/cmake/onnxruntime_providers.cmake +++ b/cmake/onnxruntime_providers.cmake @@ -621,7 +621,7 @@ if (onnxruntime_USE_TENSORRT) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter -Wno-missing-field-initializers") endif() set(CXX_VERSION_DEFINED TRUE) - + if (onnxruntime_USE_TENSORRT_BUILTIN_PARSER) # Add TensorRT library find_path(TENSORRT_INCLUDE_DIR NvInfer.h @@ -658,9 +658,9 @@ if (onnxruntime_USE_TENSORRT) include_directories(${TENSORRT_INCLUDE_DIR}) set(onnxparser_link_libs nvonnxparser_static) endif() - + set(trt_link_libs cudnn ${CMAKE_DL_LIBS} ${TENSORRT_LIBRARY}) - + file(GLOB_RECURSE onnxruntime_providers_tensorrt_cc_srcs CONFIGURE_DEPENDS "${ONNXRUNTIME_ROOT}/core/providers/tensorrt/*.h" "${ONNXRUNTIME_ROOT}/core/providers/tensorrt/*.cc" @@ -1157,7 +1157,7 @@ if (onnxruntime_USE_DML) if (GDK_PLATFORM STREQUAL Scarlett) target_link_libraries(onnxruntime_providers_dml PRIVATE ${gdk_dx_libs}) else() - target_link_libraries(onnxruntime_providers_dml PRIVATE d3d12.lib dxgi.lib) + target_link_libraries(onnxruntime_providers_dml PRIVATE dxguid.lib d3d12.lib dxgi.lib) endif() target_link_libraries(onnxruntime_providers_dml PRIVATE delayimp.lib) diff --git a/onnxruntime/core/providers/dml/DmlExecutionProvider/src/AbiCustomRegistry.cpp b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/AbiCustomRegistry.cpp index 255659521d79..5fa9c89e6a72 100644 --- a/onnxruntime/core/providers/dml/DmlExecutionProvider/src/AbiCustomRegistry.cpp +++ b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/AbiCustomRegistry.cpp @@ -544,8 +544,7 @@ HRESULT STDMETHODCALLTYPE AbiCustomRegistry::RegisterOperatorKernel( // Currently unsupported for external operators if (canAliasFirstInput || supportsGraph || - requiredInputCountForGraph || - requiredConstantCpuInputs) + requiredInputCountForGraph) { ORT_THROW_HR(E_INVALIDARG); } diff --git a/onnxruntime/core/providers/dml/DmlExecutionProvider/src/MLOperatorAuthorImpl.cpp b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/MLOperatorAuthorImpl.cpp index e977900427fd..7c2507bb7665 100644 --- a/onnxruntime/core/providers/dml/DmlExecutionProvider/src/MLOperatorAuthorImpl.cpp +++ b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/MLOperatorAuthorImpl.cpp @@ -1408,11 +1408,14 @@ namespace Windows::AI::MachineLearning::Adapter ComPtr tensor; ORT_THROW_IF_FAILED(GetInputTensor(i, tensor.GetAddressOf())); - ComPtr resource; - tensor->GetDataInterface(resource.GetAddressOf()); - if (resource) + if (tensor) { - resourcesToTransition.push_back(resource.Get()); + ComPtr resource; + tensor->GetDataInterface(resource.GetAddressOf()); + if (resource) + { + resourcesToTransition.push_back(resource.Get()); + } } } @@ -1525,21 +1528,27 @@ namespace Windows::AI::MachineLearning::Adapter ML_CHECK_BOOL(inputIndex < m_inputTensors.size()); + auto opKernelContextWrapper = const_cast(this); if (m_inputTensors[inputIndex]->GetInterface() == nullptr) { auto inputTensor = m_impl->Input(inputIndex); + if (inputTensor != nullptr) + { + ComPtr tensorWrapper = wil::MakeOrThrow( + const_cast(inputTensor), + IsAllocationInterface(inputTensor->Location()), + m_winmlProvider.Get(), + m_internalOperator); - ComPtr tensorWrapper = wil::MakeOrThrow( - const_cast(inputTensor), - IsAllocationInterface(inputTensor->Location()), - m_winmlProvider.Get(), - m_internalOperator); - - const_cast(this)->m_inputTensors[inputIndex] = tensorWrapper; + opKernelContextWrapper->m_inputTensors[inputIndex] = tensorWrapper; + } } - const_cast(this)->m_inputTensors[inputIndex].CopyTo(tensor); + if (opKernelContextWrapper->m_inputTensors[inputIndex] != nullptr) + { + opKernelContextWrapper->m_inputTensors[inputIndex].CopyTo(tensor); + } return S_OK; } ORT_CATCH_RETURN diff --git a/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/DmlDFT.h b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/DmlDFT.h new file mode 100644 index 000000000000..2e42917d36fa --- /dev/null +++ b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/DmlDFT.h @@ -0,0 +1,728 @@ +#pragma once + +#include "../MLOperatorAuthorImpl.h" +#include "../../../OperatorAuthorHelper/OperatorHelper.h" + +#include "../External/D3DX12/d3dx12.h" + +// The shader header is produced using "fxc.exe dft_shader.hlsl -E DFT -T cs_5_0 -Zi /Fh" +#include "GeneratedShaders/stockham.h" + +#include +#include + +#include + +using namespace Microsoft::WRL; + +namespace DFTHelpers { + // Divides and rounds up + inline uint32_t CeilDivide(uint32_t dividend, uint32_t divisor) + { + UINT64 temp = static_cast(dividend) + divisor - 1; + return static_cast(temp / divisor); + } + + // Gets the next number of elements to dispatch to the GPU within a loop handling a large + // total number of tensor elements and threads. + void GetNextDispatchSize( + uint32_t elementCount, + uint32_t elementsPerThread, + uint32_t numThreads, + _Out_ uint32_t& dispatch, + _Out_ uint32_t& pendingElementCount + ) + { + // Max threads per workgroup is 2^10 (1024). Max dispatch per dimension is 2^16. Taken together, we can dispatch a maximum of + // 2^26 (268,435,456) threads along a single dimension. This should suffice for a majority of the workload. Therefore, even + // though it is possible to dispatch up to (2^16)^3 workgroups simultaneously, we stick to the simpler 1D dispatch alternative. + assert(numThreads <= D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP); + + const uint32_t maxThreadsPerDispatch = numThreads * D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION; + + const uint32_t requiredThreadCount = CeilDivide(elementCount, elementsPerThread); + + // Compute max dispatchable elements + const uint32_t availableThreadCount = std::min(requiredThreadCount, maxThreadsPerDispatch); + + // Compute required thread group count + uint32_t workGroupCount1D = CeilDivide(availableThreadCount, numThreads); + + // Compute min dispatch size + dispatch = workGroupCount1D; + + // With the dispatch size computed, compute the dispatched element count + const uint32_t dispatchedElementCount = workGroupCount1D * numThreads * elementsPerThread; + + // Update the pending element count + pendingElementCount = (dispatchedElementCount < elementCount) ? elementCount - dispatchedElementCount : 0; + } + +} + +class GpuDFTOperator : public WRL::Base +{ +private: + ComPtr m_device; + ComPtr m_rootSignature; + ComPtr m_pipelineState; + + std::vector m_inputDims = {}; + std::vector m_outputDims = {}; + int64_t m_axis; + bool m_isOnesided; + bool m_isInverse; + + uint32_t m_outputDataSize = 0; + uint32_t m_inputDataSize = 0; + uint32_t m_outputIdx = 0; + uint32_t m_numPasses = 0; + + // Allocate temporary buffers if needed + struct ResourceDesc + { + ComPtr Resource; + std::array Sizes; + std::array Strides; + }; + std::vector m_resourceLoopList = {}; + + struct LoopRange + { + unsigned Left; + unsigned Right; + unsigned End; + unsigned CalculateIndex(unsigned index) + { + if (index > 0 && index < End) + { + unsigned range = Right - Left + 1; + index = Left + (index - 1) % range; + } + else if (index == End) + { + index = Right + 1; + } + return index; + } + }; + LoopRange m_loopRange = {}; + + struct DFTShaderConstants + { + uint32_t StartIndex; + uint32_t ElementCount; + uint32_t DFTIteration; + uint32_t IsInverse; + uint32_t InputSizes[4]; + uint32_t InputStrides[4]; + uint32_t OutputSizes[4]; + uint32_t OutputStrides[4]; + float Scale; + }; + +public: + GpuDFTOperator(IMLOperatorKernelCreationContext* context) + { + ComPtr executionObject; + context->GetExecutionInterface(executionObject.GetAddressOf()); + + ComPtr commandList; + executionObject.As(&commandList); + + ORT_THROW_IF_FAILED(commandList->GetDevice(IID_ID3D12Device, &m_device)); + + + ORT_THROW_IF_FAILED(context->GetAttribute("axis", MLOperatorAttributeType::Int, 1, sizeof(int64_t), reinterpret_cast(&m_axis))); + + int64_t isInverseInt; + ORT_THROW_IF_FAILED(context->GetAttribute("inverse", MLOperatorAttributeType::Int, 1, sizeof(int64_t), reinterpret_cast(&isInverseInt))); + m_isInverse = static_cast(isInverseInt); + + int64_t isOnesidedInt; + ORT_THROW_IF_FAILED(context->GetAttribute("onesided", MLOperatorAttributeType::Int, 1, sizeof(int64_t), reinterpret_cast(&isOnesidedInt))); + m_isOnesided = static_cast(isOnesidedInt); + + ComPtr shapeDesc; + ORT_THROW_IF_FAILED(context->GetTensorShapeDescription(shapeDesc.GetAddressOf())); + + // Get the input and output shape sizes + uint32_t inputDimsSize; + ORT_THROW_IF_FAILED(shapeDesc->GetInputTensorDimensionCount(0, &inputDimsSize)); + uint32_t outputDimsSize; + ORT_THROW_IF_FAILED(shapeDesc->GetOutputTensorDimensionCount(0, &outputDimsSize)); + ORT_THROW_HR_IF(E_FAIL, inputDimsSize != outputDimsSize); + + // Get the input shape + m_inputDims.resize(inputDimsSize); + ORT_THROW_IF_FAILED(shapeDesc->GetInputTensorShape(0, static_cast(m_inputDims.size()), m_inputDims.data())); + + // Get the output shape + m_outputDims.resize(outputDimsSize); + ORT_THROW_IF_FAILED(shapeDesc->GetOutputTensorShape(0, static_cast(m_outputDims.size()), m_outputDims.data())); + + // For the number of total elements in the input and output shapes + m_outputDataSize = ComputeElementCountFromDimensions(m_outputDims); + m_inputDataSize = ComputeElementCountFromDimensions(m_inputDims); + + // { before_dft_axis, axis, after_dft_axis, real_or_complex } + std::array reshapedInputSize = { 1, 1, 1, m_inputDims.back() }; + std::array reshapedOutputSize = { 1, 1, 1, m_outputDims.back() }; + + size_t reshapedIndex = 0; + for (int i = 0; i < m_inputDims.size() - 1; i++) + { + if (i == m_axis || i == (m_axis + 1)) + { + reshapedIndex++; + } + reshapedInputSize[reshapedIndex] *= m_inputDims[i]; + reshapedOutputSize[reshapedIndex] *= m_outputDims[i]; + } + + auto temporarySize = reshapedInputSize; + temporarySize.back() = reshapedOutputSize.back(); + + // Calculate elements and strides + std::array reshapedInputStrides = { 1, 1, 1, 1 }; + std::array reshapedOutputStrides = { 1, 1, 1, 1 }; + std::array temporaryStrides = { 1, 1, 1, 1 }; + for (int i = static_cast(m_inputDims.size()) - 2; i >= 0; i--) + { + reshapedInputStrides[i] = reshapedInputSize[i + 1] * reshapedInputStrides[i + 1]; + reshapedOutputStrides[i] = reshapedOutputSize[i + 1] * reshapedOutputStrides[i + 1]; + temporaryStrides[i] = temporarySize[i + 1] * temporaryStrides[i + 1]; + } + + // Get DFT Length + ML_CHECK_VALID_ARGUMENT(m_axis < inputDimsSize) + auto dftLength = m_inputDims[m_axis]; + + // Calculate passes + m_numPasses = static_cast(log2(dftLength)); + bool hasOnePass = m_numPasses == 1; + bool hasOddPasses = m_numPasses % 2; + bool hasEvenPasses = !hasOddPasses; + + // write directly input buffer to output buffer, dont create temps + bool writeToOutput = hasOnePass; + // First and final are input/output buffers, but all else ocillate between 2 temp buffers + bool oscillateBetweenTwoTemporaries = !hasOnePass && m_isOnesided; + // First is input buffer, all else ocillate between temp and output, causing the final pass to write to the output buffer + bool oscillateFirstOutputThenTemporary = hasOddPasses && !m_isOnesided; + // First is input buffer, all else ocillate between output and temp, causing the final pass to write to the output buffer + bool oscillateFirstTemporaryThenOutput = hasEvenPasses && !m_isOnesided; + + // Create the resource loop list + // Add the input resource to the loop list + m_resourceLoopList.push_back({}); + m_resourceLoopList.back().Resource = nullptr; + m_resourceLoopList.back().Sizes = reshapedInputSize; + m_resourceLoopList.back().Strides = reshapedInputStrides; + + // If 1 temporary should be placed first, or multiple temporaries, then + // Add a temp in the list + if (oscillateFirstTemporaryThenOutput || oscillateBetweenTwoTemporaries) + { + m_resourceLoopList.push_back({}); + m_resourceLoopList.back().Resource = CreateTemporaryResource(temporarySize); + m_resourceLoopList.back().Sizes = temporarySize; + m_resourceLoopList.back().Strides = temporaryStrides; + } + + // If 2 temps, add another + if (oscillateBetweenTwoTemporaries) + { + m_resourceLoopList.push_back({}); + m_resourceLoopList.back().Resource = CreateTemporaryResource(temporarySize); + m_resourceLoopList.back().Sizes = temporarySize; + m_resourceLoopList.back().Strides = temporaryStrides; + } + + // Add output resource + m_resourceLoopList.push_back({}); + m_resourceLoopList.back().Resource = nullptr; + m_resourceLoopList.back().Sizes = reshapedOutputSize; + m_resourceLoopList.back().Strides = reshapedOutputStrides; + m_outputIdx = static_cast(m_resourceLoopList.size() - 1); + + // Add the temporary after output incase of odd number of passes + if (oscillateFirstOutputThenTemporary) + { + m_resourceLoopList.push_back({}); + m_resourceLoopList.back().Resource = CreateTemporaryResource(temporarySize); + m_resourceLoopList.back().Sizes = temporarySize; + m_resourceLoopList.back().Strides = temporaryStrides; + } + + // Define the loop range + if (writeToOutput) { m_loopRange = { 0, 1, m_numPasses }; } + if (oscillateBetweenTwoTemporaries) { m_loopRange = { 1, 2, m_numPasses }; } + if (oscillateFirstOutputThenTemporary) { m_loopRange = { 1, 2, m_numPasses + 1 }; } + if (oscillateFirstTemporaryThenOutput) { m_loopRange = { 1, 2, m_numPasses + 1 }; } + + PrepareGpuResources(); + } + + void PrepareGpuResources() + { + // Compute root signature. + const int uavCount = 2; + std::vector rootParameters; + rootParameters.resize(uavCount + 1); + + for (UINT i = 0; i < uavCount; i++) + { + rootParameters[i].InitAsUnorderedAccessView(i); + } + + int constantCount = 21; + rootParameters[uavCount].InitAsConstants(constantCount, 0); + + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC desc; + desc.Init_1_1(static_cast(rootParameters.size()), rootParameters.data()); + + ComPtr rootSignatureBlob; + ComPtr rootSignatureErrorBlob; + ORT_THROW_IF_FAILED(D3D12SerializeVersionedRootSignature( + &desc, + rootSignatureBlob.GetAddressOf(), + rootSignatureErrorBlob.GetAddressOf() + )); + + ORT_THROW_IF_FAILED(m_device->CreateRootSignature( + 0, + rootSignatureBlob->GetBufferPointer(), + rootSignatureBlob->GetBufferSize(), + IID_ID3D12RootSignature, + &m_rootSignature + )); + + // Describe and create the compute pipeline state object (PSO). + D3D12_COMPUTE_PIPELINE_STATE_DESC computePsoDesc = {}; + computePsoDesc.pRootSignature = m_rootSignature.Get(); + computePsoDesc.CS = CD3DX12_SHADER_BYTECODE(g_DFT, sizeof(g_DFT)); + + ORT_THROW_IF_FAILED(m_device->CreateComputePipelineState(&computePsoDesc, IID_ID3D12PipelineState, &m_pipelineState)); + } + + // Keep the temporary resources around so they are not destroyed while the operator is running + std::vector> resourceCache_ = {}; + ComPtr CreateTemporaryResource(std::array& size) + { + // Regardless of inverse or onesided, temp resources are always in the middle of the + // middle of the computation passes, and as such will not be half length due to onesidedness. + // Consequently the input size can be used. However, a correction to double the size when + // real valued inputs are supplied must be made. + ComPtr output; + auto heapProperties = CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT); + auto bufferByteSize = sizeof(float) * std::accumulate(size.begin(), size.end(), 1, std::multiplies()); + D3D12_RESOURCE_DESC resourceDesc = { + D3D12_RESOURCE_DIMENSION_BUFFER, + 0, + static_cast(bufferByteSize), + 1, + 1, + 1, + DXGI_FORMAT_UNKNOWN, + {1, 0}, + D3D12_TEXTURE_LAYOUT_ROW_MAJOR, + D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS + }; + + ORT_THROW_IF_FAILED(m_device->CreateCommittedResource( + &heapProperties, + D3D12_HEAP_FLAG_NONE, + &resourceDesc, + D3D12_RESOURCE_STATE_UNORDERED_ACCESS, + nullptr, + IID_PPV_ARGS(&output))); + + resourceCache_.push_back(output); + + return output; + } + + // Computes the outputs of the kernel. This may be called multiple times + // simultaneously within the same instance of the class. Implementations + // of this method must be thread-safe. + STDMETHOD(Compute)(IMLOperatorKernelContext* context) + { + try + { + // Get the input tensor + ComPtr inputTensor; + ORT_THROW_IF_FAILED(context->GetInputTensor(0, inputTensor.GetAddressOf())); + + // Get the output tensor + ComPtr outputTensor; + context->GetOutputTensor(0, outputTensor.GetAddressOf()); + + if (outputTensor->IsCpuData() || inputTensor->IsCpuData()) + { + return E_UNEXPECTED; + } + + if (outputTensor->GetTensorDataType() != MLOperatorTensorDataType::Float || + inputTensor->GetTensorDataType() != MLOperatorTensorDataType::Float) + { + return E_UNEXPECTED; + } + + ComPtr executionObject; + ComPtr commandList; + context->GetExecutionInterface(executionObject.GetAddressOf()); + executionObject.As(&commandList); + + ComPtr inputUnknown; + ComPtr inputResource; + inputTensor->GetDataInterface(inputUnknown.GetAddressOf()); + inputUnknown.As(&inputResource); + + ComPtr outputUnknown; + ComPtr outputResource; + outputTensor->GetDataInterface(outputUnknown.GetAddressOf()); + outputUnknown.As(&outputResource); + + auto isPowerOfTwo = [](uint32_t n) { return (n != 0) && ((n & (n - 1)) == 0); }; + if (isPowerOfTwo(m_inputDims[m_axis])) + { + StockhamFFT(inputResource.Get(), outputResource.Get(), commandList.Get()); + } + else { + BluesteinZChirp(inputResource.Get(), outputResource.Get(), commandList.Get()); + } + return S_OK; + } + catch (...) + { + return E_FAIL; + } + } + + void StockhamFFT( + ID3D12Resource* inputResource, + ID3D12Resource* outputResource, + ID3D12GraphicsCommandList* commandList) + { + // Transition resources from common to UAV state + D3D12_RESOURCE_BARRIER barriers[2]; + + barriers[0] = CD3DX12_RESOURCE_BARRIER::Transition( + inputResource, + D3D12_RESOURCE_STATE_COMMON, + D3D12_RESOURCE_STATE_UNORDERED_ACCESS + ); + + barriers[1] = CD3DX12_RESOURCE_BARRIER::Transition( + outputResource, + D3D12_RESOURCE_STATE_COMMON, + D3D12_RESOURCE_STATE_UNORDERED_ACCESS + ); + + commandList->ResourceBarrier(2, barriers); + + // Set the root signature and pipeline state + commandList->SetComputeRootSignature(m_rootSignature.Get()); + commandList->SetPipelineState(m_pipelineState.Get()); + + // Each iteration of the below loop represents 1 level in the Stockham DFT + // Dispatch in a loop + DFTShaderConstants constants = {}; + constants.DFTIteration = 0; + constants.IsInverse = m_isInverse; + + auto resourceLoopList = m_resourceLoopList; + resourceLoopList[0].Resource = inputResource; + resourceLoopList[m_outputIdx].Resource = outputResource; + + for (unsigned index = 0; index < m_numPasses; index++) + { + auto inIdx = m_loopRange.CalculateIndex(index); + auto outIdx = m_loopRange.CalculateIndex(index + 1); + + auto in = resourceLoopList[inIdx].Resource.Get(); + std::copy(resourceLoopList[inIdx].Sizes.begin(), resourceLoopList[inIdx].Sizes.end(), constants.InputSizes); + std::copy(resourceLoopList[inIdx].Strides.begin(), resourceLoopList[inIdx].Strides.end(), constants.InputStrides); + + auto out = resourceLoopList[outIdx].Resource.Get(); + std::copy(resourceLoopList[outIdx].Sizes.begin(), resourceLoopList[outIdx].Sizes.end(), constants.OutputSizes); + std::copy(resourceLoopList[outIdx].Strides.begin(), resourceLoopList[outIdx].Strides.end(), constants.OutputStrides); + + auto isLastPass = (index == m_numPasses - 1); + auto isLastInversePass = isLastPass && m_isInverse; + auto dftLength = 1 << m_numPasses; + constants.Scale = isLastInversePass ? (1.f / dftLength) : 1.f; + + auto totalElementCount = + std::accumulate(constants.OutputSizes, + constants.OutputSizes + std::size(constants.OutputSizes), + 1, + std::multiplies()); + constants.ElementCount = totalElementCount / constants.OutputSizes[3]; + constants.DFTIteration = index + 1; + Dispatch(in, out, constants, commandList); + } + + // Transition resources to common state + barriers[0] = CD3DX12_RESOURCE_BARRIER::Transition( + inputResource, + D3D12_RESOURCE_STATE_UNORDERED_ACCESS, + D3D12_RESOURCE_STATE_COMMON + ); + + barriers[1] = CD3DX12_RESOURCE_BARRIER::Transition( + outputResource, + D3D12_RESOURCE_STATE_UNORDERED_ACCESS, + D3D12_RESOURCE_STATE_COMMON + ); + + commandList->ResourceBarrier(2, barriers); + } + + void Dispatch( + ID3D12Resource* inputResource, + ID3D12Resource* outputResource, + DFTShaderConstants& constants, + ID3D12GraphicsCommandList* commandList) + { + D3D12_RESOURCE_BARRIER uav_barriers[2]; + uav_barriers[0] = CD3DX12_RESOURCE_BARRIER::UAV(inputResource); + uav_barriers[1] = CD3DX12_RESOURCE_BARRIER::UAV(outputResource); + commandList->ResourceBarrier(2, uav_barriers); + // Set resource views + commandList->SetComputeRootUnorderedAccessView( + 0, // root parameter index + inputResource->GetGPUVirtualAddress() + ); + + commandList->SetComputeRootUnorderedAccessView( + 1, // root parameter index + outputResource->GetGPUVirtualAddress() + ); + auto pendingElementCount = constants.ElementCount; + + // Dispatch up to the maximum number of threads per iteration until + // all elements are completed + while (pendingElementCount > 0) + { + constants.StartIndex = constants.ElementCount - pendingElementCount; + + uint32_t dispatchSizeX; + + DFTHelpers::GetNextDispatchSize( + pendingElementCount, + 1, + 64, + dispatchSizeX, + pendingElementCount + ); + + // Set root constants + commandList->SetComputeRoot32BitConstants( + 2, // root parameter index + 21, // Constant count + &constants, + 0 // offset + ); + + commandList->Dispatch(dispatchSizeX, 1, 1); + } + + commandList->ResourceBarrier(2, uav_barriers); + } + + void BluesteinZChirp( + ID3D12Resource* /*inputResource*/, + ID3D12Resource* /*outputResource*/, + ID3D12GraphicsCommandList* /*commandList*/) + { + ORT_THROW_HR(E_NOTIMPL); + } +}; + +struct DFTShapeInferrer : public WRL::Base +{ + STDMETHOD(InferOutputShapes)(IMLOperatorShapeInferenceContext* context) noexcept + { + try + { + int64_t axis; + ORT_THROW_IF_FAILED(context->GetAttribute("axis", MLOperatorAttributeType::Int, 1, sizeof(int64_t), reinterpret_cast(&axis))); + int64_t isInverseInt; + ORT_THROW_IF_FAILED(context->GetAttribute("inverse", MLOperatorAttributeType::Int, 1, sizeof(int64_t), reinterpret_cast(&isInverseInt))); + int64_t isOnesidedInt; + ORT_THROW_IF_FAILED(context->GetAttribute("onesided", MLOperatorAttributeType::Int, 1, sizeof(int64_t), reinterpret_cast(&isOnesidedInt))); + bool isOnesided = static_cast(isOnesidedInt); + bool isInverse = static_cast(isInverseInt); + + if (isInverse && isOnesided) + { + throw new std::exception("onesided and inverse attributes cannot be enabled at the same time"); + } + + uint32_t rank; + ORT_THROW_IF_FAILED(context->GetInputTensorDimensionCount(0, &rank)); + if (rank == 0) + { + // If no shape is available for the input, skip shape inference... + throw; + } + + auto axisIdx = OperatorHelper::HandleNegativeAxis(static_cast(axis), rank); + + // In general the output shape will match the input shape exactly + // So initialize the output shape with the input shape + std::vector inputDims(rank); + ORT_THROW_IF_FAILED(context->GetInputTensorShape(0, rank, inputDims.data())); + auto outputDims = inputDims; + // The last dimension of the output shape is always 2. + // It corresponds to the real and imaginary parts of the DFT output. + outputDims.back() = 2; + + if (context->IsInputValid(1)) + { + // If dft_length is specified, then we should honor the shape. + // If onesided this will be adjusted later on. + ComPtr contextPrivate; + ORT_THROW_IF_FAILED(context->QueryInterface(IID_PPV_ARGS(&contextPrivate))); + ComPtr dftLengthTensor; + ORT_THROW_IF_FAILED(contextPrivate->GetConstantInputTensor(1, &dftLengthTensor)); + MLOperatorTensor tensor(dftLengthTensor.Get()); + auto dft_length = gsl::narrow_cast(OperatorHelper::ReadScalarTensorCastToInt64(tensor)); + outputDims[axisIdx] = dft_length; + } + + // When DFT is onesided, the output shape is half the size of the input shape + // along the specified axis. + if (isOnesided) + { + auto axisDimension = outputDims.at(axisIdx); + // We need to update the output shape dimension along the specified axis, + // but sometimes the dimension will be a free dimension or be otherwise unset. + // Only perform inference when a input dimension value exists. + auto originalSignalSize = axisDimension; + auto halfSignalSize = (originalSignalSize >> 1) + 1; + outputDims.at(axisIdx) = halfSignalSize; + } + + ORT_THROW_IF_FAILED(context->SetOutputTensorShape(0, rank, outputDims.data())); + } + catch (...) + { + return E_FAIL; + } + + return S_OK; + } +}; + +class GpuDFTOperatorFactory : public WRL::Base +{ +public: + STDMETHOD(CreateKernel)( + IMLOperatorKernelCreationContext* context, + IMLOperatorKernel** kernel) + { + try + { + auto dftOperator = wil::MakeOrThrow(context); + dftOperator.CopyTo(kernel); + return S_OK; + } + catch (...) + { + return E_FAIL; + } + } + + static void RegisterDFTKernel(IMLOperatorRegistry* registry) + { + MLOperatorKernelDescription kernelDescription = {}; + kernelDescription.domain = ""; + kernelDescription.name = "DFT"; + kernelDescription.minimumOperatorSetVersion = 17; + kernelDescription.executionType = MLOperatorExecutionType::D3D12; + + // T1: tensor(float16), tensor(float), tensor(double), tensor(bfloat16) + MLOperatorEdgeTypeConstrant t1Constraint; + t1Constraint.typeLabel = "T1"; + std::vector t1AllowedEdges + { + //MLOperatorEdgeDescription { MLOperatorEdgeType::Tensor, (uint64_t)MLOperatorTensorDataType::Float16 }, + MLOperatorEdgeDescription { MLOperatorEdgeType::Tensor, (uint64_t)MLOperatorTensorDataType::Float }, + //MLOperatorEdgeDescription { MLOperatorEdgeType::Tensor, (uint64_t)MLOperatorTensorDataType::Double }, + }; + t1Constraint.allowedTypes = t1AllowedEdges.data(); + t1Constraint.allowedTypeCount = static_cast(t1AllowedEdges.size()); + + // T2 : tensor(int32), tensor(int64) + MLOperatorEdgeTypeConstrant t2Constraint; + t2Constraint.typeLabel = "T2"; + std::vector t2AllowedEdges + { + // MLOperatorEdgeDescription { MLOperatorEdgeType::Tensor, (uint64_t)MLOperatorTensorDataType::Int32 }, + MLOperatorEdgeDescription { MLOperatorEdgeType::Tensor, (uint64_t)MLOperatorTensorDataType::Int64 }, + }; + t2Constraint.allowedTypes = t2AllowedEdges.data(); + t2Constraint.allowedTypeCount = static_cast(t2AllowedEdges.size()); + + std::vector typeConstraints{ t1Constraint, t2Constraint }; + kernelDescription.typeConstraints = typeConstraints.data(); + kernelDescription.typeConstraintCount = static_cast(typeConstraints.size()); + + MLOperatorAttributeNameValue axisAttributeValue; + axisAttributeValue.name = "axis"; + axisAttributeValue.type = MLOperatorAttributeType::Int; + axisAttributeValue.valueCount = 1; + static const int64_t axis[] = { 1 }; + axisAttributeValue.ints = axis; + + MLOperatorAttributeNameValue inverseAttributeValue; + inverseAttributeValue.name = "inverse"; + inverseAttributeValue.type = MLOperatorAttributeType::Int; + inverseAttributeValue.valueCount = 1; + static const int64_t inverse[] = { 0 }; + inverseAttributeValue.ints = inverse; + + MLOperatorAttributeNameValue onesidedAttributeValue; + onesidedAttributeValue.name = "onesided"; + onesidedAttributeValue.type = MLOperatorAttributeType::Int; + onesidedAttributeValue.valueCount = 1; + static const int64_t onesided[] = { 0 }; + onesidedAttributeValue.ints = onesided; + + std::vector attributeDefaultValues{ + axisAttributeValue, + inverseAttributeValue, + onesidedAttributeValue + }; + + kernelDescription.defaultAttributes = attributeDefaultValues.data(); + kernelDescription.defaultAttributeCount = static_cast(attributeDefaultValues.size()); + kernelDescription.options = MLOperatorKernelOptions::None; + kernelDescription.executionOptions = 0; + + auto shareInferrer = wil::MakeOrThrow(); + auto factory = wil::MakeOrThrow(); + + std::array requiredConstantCpuInputs = { 1 }; + + ComPtr registryPrivate; + ORT_THROW_IF_FAILED(registry->QueryInterface(IID_PPV_ARGS(®istryPrivate))); + + ORT_THROW_IF_FAILED(registryPrivate->RegisterOperatorKernel( + &kernelDescription, + factory.Get(), + shareInferrer.Get(), + nullptr, + false, // isInternalOperator + false, // alias + false, // supportsGraph + nullptr, + requiredConstantCpuInputs.data(), + static_cast(requiredConstantCpuInputs.size()) + )); + + } +}; diff --git a/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/DmlOperator.cpp b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/DmlOperator.cpp index 85284c6ada50..bb803c3eba87 100644 --- a/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/DmlOperator.cpp +++ b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/DmlOperator.cpp @@ -64,7 +64,7 @@ namespace Dml auto kernelInputIndices = ReplaceUnusedEdgeIndicesWithSentinel(m_kernelInputIndices); properties.dmlInputCount = static_cast(kernelInputIndices.size()); properties.kernelInputIndices = kernelInputIndices.data(); - + auto kernelOutputIndices = ReplaceUnusedEdgeIndicesWithSentinel(m_kernelOutputIndices); properties.dmlOutputCount = static_cast(kernelOutputIndices.size()); properties.kernelOutputIndices = kernelOutputIndices.data(); @@ -88,7 +88,7 @@ namespace Dml m_persistentResourceBinding = DML_BUFFER_BINDING{ m_persistentResource.Get(), 0, persistentResourceSize }; } - + std::vector initializationInputBindings(m_kernelInputIndices.size()); ORT_THROW_IF_FAILED(m_executionProvider->InitializeOperator( @@ -183,7 +183,7 @@ namespace Dml else { m_inputTensorDescs.push_back(CreateTensorDescFromInput( - kernelInfo, + kernelInfo, *m_kernelInputIndices[i], TensorAxis::DoNotCoerce, TensorAxis::W, @@ -205,7 +205,7 @@ namespace Dml else { m_outputTensorDescs.push_back(CreateTensorDescFromOutput( - kernelInfo, + kernelInfo, *m_kernelOutputIndices[i], TensorAxis::DoNotCoerce, TensorAxis::W, @@ -231,7 +231,7 @@ namespace Dml bool DmlOperator::AllowHalfPrecisionComputation() const { // Most of our operators work with float data, but some do not. In those cases - // no input params are float tensors. This function returns true if the operator + // no input params are float tensors. This function returns true if the operator // works with at least one float16 tensor and has no tensors of float32 type bool usesFloat16Tensors = false; @@ -464,7 +464,7 @@ namespace Dml } auto outputShape = outputShapeDescription.GetOutputTensorShape(index); - + return TensorDesc( edgeDesc.tensorDataType, tensorShape ? *tensorShape : outputShape, diff --git a/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/GeneratedShaders/GenerateShaders.bat b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/GeneratedShaders/GenerateShaders.bat new file mode 100644 index 000000000000..4bfffb11ddce --- /dev/null +++ b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/GeneratedShaders/GenerateShaders.bat @@ -0,0 +1 @@ +fxc.exe ..\Shaders\stockham.hlsl -E DFT -T cs_5_0 -Zi /Od /Fh stockham.h \ No newline at end of file diff --git a/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/GeneratedShaders/stockham.h b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/GeneratedShaders/stockham.h new file mode 100644 index 000000000000..f6c859c6e993 --- /dev/null +++ b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/GeneratedShaders/stockham.h @@ -0,0 +1,5298 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer Constants +// { +// +// uint StartIndex; // Offset: 0 Size: 4 +// uint ElementCount; // Offset: 4 Size: 4 +// uint DFTIteration; // Offset: 8 Size: 4 +// uint IsInverse; // Offset: 12 Size: 4 +// uint4 InputSizes; // Offset: 16 Size: 16 +// uint4 InputStrides; // Offset: 32 Size: 16 +// uint4 OutputSizes; // Offset: 48 Size: 16 +// uint4 OutputStrides; // Offset: 64 Size: 16 +// float Scale; // Offset: 80 Size: 4 +// +// } +// +// Resource bind info for src +// { +// +// float $Element; // Offset: 0 Size: 4 +// +// } +// +// Resource bind info for dst +// { +// +// float $Element; // Offset: 0 Size: 4 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// src UAV struct r/w u0 1 +// dst UAV struct r/w u1 1 +// Constants cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed | skipOptimization +dcl_constantbuffer CB0[6], immediateIndexed +dcl_uav_structured u0, 4 +dcl_uav_structured u1, 4 +dcl_input vThreadID.x +dcl_temps 5 +dcl_thread_group 64, 1, 1 +// +// Initial variable locations: +// vThreadID.x <- dtid.x; vThreadID.y <- dtid.y; vThreadID.z <- dtid.z +// +#line 87 "E:\work\Windows-Machine-Learning\Samples\CustomOperator\desktop\cpp\operators\stockham.hlsl" +mov r0.x, l(6.283185) // r0.x <- TAU + +#line 60 +iadd r0.y, vThreadID.x, cb0[0].x // r0.y <- index + +#line 61 +ult r0.z, r0.y, cb0[0].y +if_nz r0.z + +#line 63 + mov r0.z, cb0[1].y // r0.z <- inputLength + +#line 65 + mov r0.w, cb0[0].z + ishl r0.w, l(1), r0.w // r0.w <- N + +#line 66 + mov r1.x, l(1) + ineg r1.x, r1.x + iadd r1.x, r1.x, cb0[0].z + ishl r1.x, l(1), r1.x // r1.x <- halfN + +#line 71 + nop + mov r0.y, r0.y + +#line 48 + imul null, r1.y, cb0[3].z, cb0[3].y + udiv null, r1.y, r0.y, r1.y // r1.y <- temp + +#line 51 + imul null, r1.z, cb0[3].z, cb0[3].y + udiv r2.x, null, r0.y, r1.z // r2.x <- idx.x + +#line 52 + udiv r2.y, null, r1.y, cb0[3].z // r2.y <- idx.y + +#line 53 + udiv null, r2.z, r1.y, cb0[3].z // r2.z <- idx.z + +#line 54 + mov r2.x, r2.x // r2.x <- .x + mov r2.y, r2.y // r2.y <- .y + mov r2.z, r2.z // r2.z <- .z + +#line 71 + mov r2.xyz, r2.xyzx // r2.x <- idx.x; r2.y <- idx.y; r2.z <- idx.z + +#line 72 + ushr r1.y, r2.y, cb0[0].z + imul null, r1.y, r1.x, r1.y + udiv null, r1.x, r2.y, r1.x + iadd r1.y, r1.x, r1.y // r1.y <- inputEvenOddIndexPair.x + +#line 73 + mov r1.w, l(2) + udiv r0.z, null, r0.z, r1.w + iadd r3.y, r0.z, r1.y // r3.y <- inputEvenOddIndexPair.y + +#line 76 + mov r1.xz, r2.xxzx // r1.x <- inputEvenIdx.x; r1.z <- inputEvenIdx.z + mov r1.y, r1.y // r1.y <- inputEvenIdx.y + +#line 77 + mov r3.xz, r1.xxzx // r3.x <- inputOddIdx.x; r3.z <- inputOddIdx.z + mov r3.y, r3.y // r3.y <- inputOddIdx.y + +#line 80 + nop + mov r1.xyz, r1.xyzx + +#line 28 + itof r4.y, l(0) // r4.y <- value.y + +#line 30 + imul null, r0.z, r1.x, cb0[2].x + imul null, r1.x, r1.y, cb0[2].y + iadd r0.z, r0.z, r1.x + imul null, r1.x, r1.z, cb0[2].z + iadd r0.z, r0.z, r1.x // r0.z <- indexReal + +#line 34 + ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r4.x, r0.z, l(0), u0.xxxx // r4.x <- value.x + +#line 38 + mov r1.x, l(2) + ieq r1.x, r1.x, cb0[1].w + if_nz r1.x + +#line 39 + iadd r0.z, r0.z, cb0[2].w // r0.z <- indexImaginary + +#line 40 + ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r4.y, r0.z, l(0), u0.xxxx + +#line 41 + endif + +#line 43 + mov r4.x, r4.x // r4.x <- .x + mov r4.y, r4.y // r4.y <- .y + +#line 80 + mov r4.xy, r4.xyxx // r4.x <- inputEvenValue.x; r4.y <- inputEvenValue.y + +#line 81 + nop + mov r3.xyz, r3.xyzx + +#line 28 + itof r1.y, l(0) // r1.y <- value.y + +#line 30 + imul null, r0.z, r3.x, cb0[2].x + imul null, r1.z, r3.y, cb0[2].y + iadd r0.z, r0.z, r1.z + imul null, r1.z, r3.z, cb0[2].z + iadd r0.z, r0.z, r1.z // r0.z <- indexReal + +#line 34 + ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r1.x, r0.z, l(0), u0.xxxx // r1.x <- value.x + +#line 38 + mov r1.z, l(2) + ieq r1.z, r1.z, cb0[1].w + if_nz r1.z + +#line 39 + iadd r0.z, r0.z, cb0[2].w // r0.z <- indexImaginary + +#line 40 + ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r1.y, r0.z, l(0), u0.xxxx + +#line 41 + endif + +#line 43 + mov r1.x, r1.x // r1.x <- .x + mov r1.y, r1.y // r1.y <- .y + +#line 81 + mov r1.xy, r1.xyxx // r1.x <- inputOddValue.x; r1.y <- inputOddValue.y + +#line 85 + udiv null, r0.z, r2.y, r0.w // r0.z <- k + +#line 88 + mov r1.z, l(1) + ieq r1.z, r1.z, cb0[0].w // r1.z <- isInverse + +#line 89 + movc r1.z, r1.z, l(1.000000), l(-1.000000) // r1.z <- inverse_switch + +#line 90 + mul r0.x, r0.x, r1.z + utof r0.z, r0.z + mul r0.x, r0.z, r0.x + utof r0.z, r0.w + div r0.x, r0.x, r0.z // r0.x <- theta + +#line 91 + sincos null, r0.z, r0.x // r0.z <- w.x + sincos r0.x, null, r0.x // r0.x <- w.y + +#line 93 + nop + mov r0.y, r0.y + +#line 20 + imul null, r2.x, r0.y, cb0[4].z // r2.x <- dftOutputIndex.x + +#line 21 + iadd r2.y, r2.x, cb0[4].w // r2.y <- dftOutputIndex.y + +#line 22 + mov r2.x, r2.x // r2.x <- .x + mov r2.y, r2.y // r2.y <- .y + +#line 93 + mov r2.xy, r2.xyxx // r2.x <- outputIndex.x; r2.y <- outputIndex.y + +#line 94 + mul r0.y, r1.x, r0.z + mul r0.w, r1.y, r0.x + mov r0.w, -r0.w + add r0.y, r0.w, r0.y + add r0.y, r0.y, r4.x + mul r0.y, r0.y, cb0[5].x + store_structured u1.x, r2.x, l(0), r0.y + +#line 95 + mul r0.y, r1.y, r0.z + mul r0.x, r1.x, r0.x + add r0.x, r0.x, r0.y + add r0.x, r0.x, r4.y + mul r0.x, r0.x, cb0[5].x + store_structured u1.x, r2.y, l(0), r0.x + +#line 96 +endif + +#line 97 +ret +// Approximately 103 instruction slots used +#endif + +const BYTE g_DFT[] = +{ + 68, 88, 66, 67, 55, 188, + 98, 17, 179, 52, 72, 81, + 5, 198, 236, 2, 150, 204, + 101, 113, 1, 0, 0, 0, + 152, 117, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 52, 4, 0, 0, 68, 4, + 0, 0, 84, 4, 0, 0, + 244, 14, 0, 0, 144, 15, + 0, 0, 82, 68, 69, 70, + 244, 3, 0, 0, 3, 0, + 0, 0, 176, 0, 0, 0, + 3, 0, 0, 0, 60, 0, + 0, 0, 0, 5, 83, 67, + 5, 1, 0, 0, 204, 3, + 0, 0, 82, 68, 49, 49, + 60, 0, 0, 0, 24, 0, + 0, 0, 32, 0, 0, 0, + 40, 0, 0, 0, 36, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 156, 0, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 1, 0, + 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 160, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 0, 4, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 164, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 115, 114, + 99, 0, 100, 115, 116, 0, + 67, 111, 110, 115, 116, 97, + 110, 116, 115, 0, 171, 171, + 164, 0, 0, 0, 9, 0, + 0, 0, 248, 0, 0, 0, + 96, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 156, 0, 0, 0, 1, 0, + 0, 0, 76, 3, 0, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 160, 0, 0, 0, 1, 0, + 0, 0, 164, 3, 0, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 96, 2, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 2, 0, 0, 0, 116, 2, + 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 152, 2, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 2, 0, + 0, 0, 116, 2, 0, 0, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 165, 2, 0, 0, + 8, 0, 0, 0, 4, 0, + 0, 0, 2, 0, 0, 0, + 116, 2, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 178, 2, 0, 0, 12, 0, + 0, 0, 4, 0, 0, 0, + 2, 0, 0, 0, 116, 2, + 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 188, 2, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 2, 0, + 0, 0, 208, 2, 0, 0, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 244, 2, 0, 0, + 32, 0, 0, 0, 16, 0, + 0, 0, 2, 0, 0, 0, + 208, 2, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 3, 0, 0, 48, 0, + 0, 0, 16, 0, 0, 0, + 2, 0, 0, 0, 208, 2, + 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 13, 3, + 0, 0, 64, 0, 0, 0, + 16, 0, 0, 0, 2, 0, + 0, 0, 208, 2, 0, 0, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 27, 3, 0, 0, + 80, 0, 0, 0, 4, 0, + 0, 0, 2, 0, 0, 0, + 40, 3, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 83, 116, 97, 114, 116, 73, + 110, 100, 101, 120, 0, 100, + 119, 111, 114, 100, 0, 171, + 171, 171, 0, 0, 19, 0, + 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 107, 2, + 0, 0, 69, 108, 101, 109, + 101, 110, 116, 67, 111, 117, + 110, 116, 0, 68, 70, 84, + 73, 116, 101, 114, 97, 116, + 105, 111, 110, 0, 73, 115, + 73, 110, 118, 101, 114, 115, + 101, 0, 73, 110, 112, 117, + 116, 83, 105, 122, 101, 115, + 0, 117, 105, 110, 116, 52, + 0, 171, 171, 171, 1, 0, + 19, 0, 1, 0, 4, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 199, 2, 0, 0, 73, 110, + 112, 117, 116, 83, 116, 114, + 105, 100, 101, 115, 0, 79, + 117, 116, 112, 117, 116, 83, + 105, 122, 101, 115, 0, 79, + 117, 116, 112, 117, 116, 83, + 116, 114, 105, 100, 101, 115, + 0, 83, 99, 97, 108, 101, + 0, 102, 108, 111, 97, 116, + 0, 171, 0, 0, 3, 0, + 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 33, 3, + 0, 0, 116, 3, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 2, 0, 0, 0, + 128, 3, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 36, 69, 108, 101, 109, 101, + 110, 116, 0, 171, 171, 171, + 0, 0, 3, 0, 1, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 33, 3, 0, 0, + 116, 3, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 2, 0, 0, 0, 128, 3, + 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 77, 105, + 99, 114, 111, 115, 111, 102, + 116, 32, 40, 82, 41, 32, + 72, 76, 83, 76, 32, 83, + 104, 97, 100, 101, 114, 32, + 67, 111, 109, 112, 105, 108, + 101, 114, 32, 49, 48, 46, + 49, 0, 73, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 79, 83, 71, 78, 8, 0, + 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 83, 72, + 69, 88, 152, 10, 0, 0, + 80, 0, 5, 0, 166, 2, + 0, 0, 106, 136, 0, 1, + 89, 0, 0, 4, 70, 142, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 158, 0, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 158, 0, 0, 4, + 0, 224, 17, 0, 1, 0, + 0, 0, 4, 0, 0, 0, + 95, 0, 0, 2, 18, 0, + 2, 0, 104, 0, 0, 2, + 5, 0, 0, 0, 155, 0, + 0, 4, 64, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 219, 15, 201, 64, 30, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 2, 0, 10, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 79, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 42, 0, 16, 0, + 0, 0, 0, 0, 54, 0, + 0, 6, 66, 0, 16, 0, + 0, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 54, 0, + 0, 6, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 41, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 40, 0, + 0, 5, 18, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 30, 0, 0, 8, 18, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 42, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 41, 0, 0, 7, + 18, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 0, 1, 54, 0, + 0, 5, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 38, 0, 0, 10, 0, 208, + 0, 0, 34, 0, 16, 0, + 1, 0, 0, 0, 42, 128, + 32, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 78, 0, + 0, 8, 0, 208, 0, 0, + 34, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 38, 0, 0, 10, 0, 208, + 0, 0, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 128, + 32, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 78, 0, + 0, 8, 18, 0, 16, 0, + 2, 0, 0, 0, 0, 208, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 78, 0, 0, 9, 34, 0, + 16, 0, 2, 0, 0, 0, + 0, 208, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 42, 128, 32, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 78, 0, 0, 9, 0, 208, + 0, 0, 66, 0, 16, 0, + 2, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 42, 128, 32, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 54, 0, 0, 5, + 34, 0, 16, 0, 2, 0, + 0, 0, 26, 0, 16, 0, + 2, 0, 0, 0, 54, 0, + 0, 5, 66, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 2, 0, 0, 0, + 54, 0, 0, 5, 114, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 2, 0, + 0, 0, 85, 0, 0, 8, + 34, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 2, 0, 0, 0, 42, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 38, 0, + 0, 8, 0, 208, 0, 0, + 34, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 78, 0, 0, 8, 0, 208, + 0, 0, 18, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 30, 0, 0, 7, + 34, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 2, 0, + 0, 0, 78, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 0, 208, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 30, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 1, 0, + 0, 0, 54, 0, 0, 5, + 82, 0, 16, 0, 1, 0, + 0, 0, 6, 2, 16, 0, + 2, 0, 0, 0, 54, 0, + 0, 5, 34, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 54, 0, 0, 5, 82, 0, + 16, 0, 3, 0, 0, 0, + 6, 2, 16, 0, 1, 0, + 0, 0, 54, 0, 0, 5, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 0, 1, 54, 0, 0, 5, + 114, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 1, 0, 0, 0, 43, 0, + 0, 5, 34, 0, 16, 0, + 4, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 38, 0, 0, 9, 0, 208, + 0, 0, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 38, 0, 0, 9, 0, 208, + 0, 0, 18, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 30, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 1, 0, 0, 0, 38, 0, + 0, 9, 0, 208, 0, 0, + 18, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 42, 128, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 30, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 167, 0, 0, 139, + 2, 35, 0, 128, 131, 153, + 25, 0, 18, 0, 16, 0, + 4, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 6, 224, 17, 0, + 0, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 32, 0, 0, 8, 18, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 58, 128, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 1, 0, + 0, 0, 30, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 128, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 167, 0, + 0, 139, 2, 35, 0, 128, + 131, 153, 25, 0, 34, 0, + 16, 0, 4, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 6, 224, + 17, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 54, 0, + 0, 5, 18, 0, 16, 0, + 4, 0, 0, 0, 10, 0, + 16, 0, 4, 0, 0, 0, + 54, 0, 0, 5, 34, 0, + 16, 0, 4, 0, 0, 0, + 26, 0, 16, 0, 4, 0, + 0, 0, 54, 0, 0, 5, + 50, 0, 16, 0, 4, 0, + 0, 0, 70, 0, 16, 0, + 4, 0, 0, 0, 58, 0, + 0, 1, 54, 0, 0, 5, + 114, 0, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 43, 0, + 0, 5, 34, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 38, 0, 0, 9, 0, 208, + 0, 0, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 38, 0, 0, 9, 0, 208, + 0, 0, 66, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 30, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 38, 0, + 0, 9, 0, 208, 0, 0, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 128, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 30, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 167, 0, 0, 139, + 2, 35, 0, 128, 131, 153, + 25, 0, 18, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 6, 224, 17, 0, + 0, 0, 0, 0, 54, 0, + 0, 5, 66, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 32, 0, 0, 8, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 58, 128, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 31, 0, 4, 3, + 42, 0, 16, 0, 1, 0, + 0, 0, 30, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 128, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 167, 0, + 0, 139, 2, 35, 0, 128, + 131, 153, 25, 0, 34, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 6, 224, + 17, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 54, 0, + 0, 5, 18, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 54, 0, 0, 5, 34, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 1, 0, + 0, 0, 54, 0, 0, 5, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 16, 0, + 1, 0, 0, 0, 78, 0, + 0, 8, 0, 208, 0, 0, + 66, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 66, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 32, 0, 0, 8, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 58, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 55, 0, + 0, 9, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 1, 64, 0, 0, + 0, 0, 128, 191, 56, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 86, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 86, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 77, 0, 0, 6, + 0, 208, 0, 0, 66, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 77, 0, 0, 6, + 18, 0, 16, 0, 0, 0, + 0, 0, 0, 208, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 0, 1, + 54, 0, 0, 5, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 38, 0, 0, 9, + 0, 208, 0, 0, 18, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 42, 128, 32, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 30, 0, 0, 8, + 34, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 58, 128, + 32, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 54, 0, 0, 5, 34, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 2, 0, + 0, 0, 54, 0, 0, 5, + 50, 0, 16, 0, 2, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 56, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 6, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 4, 0, + 0, 0, 56, 0, 0, 8, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 168, 0, + 0, 9, 18, 224, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 4, 0, + 0, 0, 56, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 168, 0, + 0, 9, 18, 224, 17, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 62, 0, 0, 1, + 83, 84, 65, 84, 148, 0, + 0, 0, 103, 0, 0, 0, + 5, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 16, 0, 0, 0, 27, 0, + 0, 0, 9, 0, 0, 0, + 1, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 29, 0, 0, 0, 1, 0, + 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 83, 80, 68, 66, 0, 102, + 0, 0, 77, 105, 99, 114, + 111, 115, 111, 102, 116, 32, + 67, 47, 67, 43, 43, 32, + 77, 83, 70, 32, 55, 46, + 48, 48, 13, 10, 26, 68, + 83, 0, 0, 0, 0, 2, + 0, 0, 2, 0, 0, 0, + 51, 0, 0, 0, 232, 0, + 0, 0, 0, 0, 0, 0, + 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 192, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 56, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 255, 5, 0, 0, 0, + 32, 0, 0, 0, 60, 0, + 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 6, 0, 0, 0, + 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 148, 46, 49, 1, 131, 64, + 0, 99, 1, 0, 0, 0, + 72, 76, 216, 215, 247, 141, + 69, 75, 145, 40, 228, 68, + 206, 46, 102, 122, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 220, 81, 51, 1, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 11, 202, 49, 1, + 56, 0, 0, 0, 0, 16, + 0, 0, 3, 16, 0, 0, + 88, 0, 0, 0, 11, 0, + 255, 255, 4, 0, 0, 0, + 255, 255, 3, 0, 0, 0, + 0, 0, 12, 0, 0, 0, + 12, 0, 0, 0, 8, 0, + 0, 0, 20, 0, 0, 0, + 0, 0, 0, 0, 26, 0, + 1, 22, 0, 0, 0, 0, + 9, 16, 0, 0, 68, 101, + 99, 111, 109, 112, 111, 115, + 101, 73, 110, 100, 101, 120, + 0, 241, 26, 0, 1, 22, + 0, 0, 0, 0, 11, 16, + 0, 0, 82, 101, 97, 100, + 83, 111, 117, 114, 99, 101, + 86, 97, 108, 117, 101, 0, + 30, 0, 1, 22, 0, 0, + 0, 0, 13, 16, 0, 0, + 67, 111, 109, 112, 117, 116, + 101, 68, 101, 115, 116, 73, + 110, 100, 101, 120, 0, 243, + 242, 241, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 102, 141, + 2, 0, 25, 96, 3, 0, + 80, 133, 1, 0, 187, 122, + 1, 0, 63, 252, 2, 0, + 117, 131, 1, 0, 146, 230, + 3, 0, 122, 191, 0, 0, + 65, 36, 1, 0, 41, 153, + 1, 0, 109, 24, 1, 0, + 24, 140, 1, 0, 221, 8, + 3, 0, 143, 195, 3, 0, + 233, 238, 0, 0, 53, 174, + 3, 0, 214, 6, 3, 0, + 98, 163, 2, 0, 169, 232, + 3, 0, 62, 3, 3, 0, + 220, 192, 1, 0, 9, 241, + 2, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 82, 87, 83, 116, 114, 117, + 99, 116, 117, 114, 101, 100, + 66, 117, 102, 102, 101, 114, + 60, 102, 108, 111, 97, 116, + 62, 32, 115, 114, 99, 32, + 58, 32, 114, 101, 103, 105, + 115, 116, 101, 114, 40, 117, + 48, 41, 59, 13, 10, 82, + 87, 83, 116, 114, 117, 99, + 116, 117, 114, 101, 100, 66, + 117, 102, 102, 101, 114, 60, + 102, 108, 111, 97, 116, 62, + 32, 100, 115, 116, 32, 58, + 32, 114, 101, 103, 105, 115, + 116, 101, 114, 40, 117, 49, + 41, 59, 13, 10, 13, 10, + 99, 98, 117, 102, 102, 101, + 114, 32, 67, 111, 110, 115, + 116, 97, 110, 116, 115, 13, + 10, 123, 13, 10, 32, 32, + 32, 32, 117, 105, 110, 116, + 32, 83, 116, 97, 114, 116, + 73, 110, 100, 101, 120, 59, + 13, 10, 32, 32, 32, 32, + 117, 105, 110, 116, 32, 69, + 108, 101, 109, 101, 110, 116, + 67, 111, 117, 110, 116, 59, + 13, 10, 32, 32, 32, 32, + 117, 105, 110, 116, 32, 68, + 70, 84, 73, 116, 101, 114, + 97, 116, 105, 111, 110, 59, + 13, 10, 32, 32, 32, 32, + 117, 105, 110, 116, 32, 73, + 115, 73, 110, 118, 101, 114, + 115, 101, 59, 13, 10, 32, + 32, 32, 32, 117, 105, 110, + 116, 52, 32, 73, 110, 112, + 117, 116, 83, 105, 122, 101, + 115, 59, 13, 10, 32, 32, + 32, 32, 117, 105, 110, 116, + 52, 32, 73, 110, 112, 117, + 116, 83, 116, 114, 105, 100, + 101, 115, 59, 13, 10, 32, + 32, 32, 32, 117, 105, 110, + 116, 52, 32, 79, 117, 116, + 112, 117, 116, 83, 105, 122, + 101, 115, 59, 13, 10, 32, + 32, 32, 32, 117, 105, 110, + 116, 52, 32, 79, 117, 116, + 112, 117, 116, 83, 116, 114, + 105, 100, 101, 115, 59, 13, + 10, 32, 32, 32, 32, 102, + 108, 111, 97, 116, 32, 83, + 99, 97, 108, 101, 59, 13, + 10, 125, 59, 13, 10, 13, + 10, 47, 47, 32, 82, 101, + 116, 117, 114, 110, 115, 32, + 116, 104, 101, 32, 105, 110, + 100, 105, 99, 101, 115, 32, + 102, 111, 114, 32, 116, 104, + 101, 32, 114, 101, 97, 108, + 32, 97, 110, 100, 32, 99, + 111, 109, 112, 108, 101, 120, + 32, 111, 117, 116, 112, 117, + 116, 32, 117, 97, 118, 13, + 10, 117, 105, 110, 116, 50, + 32, 67, 111, 109, 112, 117, + 116, 101, 68, 101, 115, 116, + 73, 110, 100, 101, 120, 40, + 117, 105, 110, 116, 32, 105, + 110, 100, 101, 120, 41, 13, + 10, 123, 13, 10, 32, 32, + 32, 32, 117, 105, 110, 116, + 50, 32, 100, 102, 116, 79, + 117, 116, 112, 117, 116, 73, + 110, 100, 101, 120, 32, 61, + 32, 117, 105, 110, 116, 50, + 40, 105, 110, 100, 101, 120, + 32, 42, 32, 79, 117, 116, + 112, 117, 116, 83, 116, 114, + 105, 100, 101, 115, 91, 50, + 93, 44, 32, 48, 41, 59, + 13, 10, 32, 32, 32, 32, + 100, 102, 116, 79, 117, 116, + 112, 117, 116, 73, 110, 100, + 101, 120, 46, 121, 32, 61, + 32, 100, 102, 116, 79, 117, + 116, 112, 117, 116, 73, 110, + 100, 101, 120, 46, 120, 32, + 43, 32, 79, 117, 116, 112, + 117, 116, 83, 116, 114, 105, + 100, 101, 115, 91, 51, 93, + 59, 13, 10, 32, 32, 32, + 32, 114, 101, 116, 117, 114, + 110, 32, 100, 102, 116, 79, + 117, 116, 112, 117, 116, 73, + 110, 100, 101, 120, 59, 13, + 10, 125, 13, 10, 13, 10, + 47, 47, 32, 84, 104, 101, + 32, 114, 101, 116, 117, 114, + 110, 101, 100, 32, 118, 97, + 108, 117, 101, 32, 105, 115, + 32, 102, 108, 111, 97, 116, + 50, 44, 32, 99, 111, 114, + 114, 101, 115, 112, 111, 110, + 100, 105, 110, 103, 32, 116, + 111, 32, 116, 104, 101, 32, + 99, 111, 109, 112, 108, 101, + 120, 32, 110, 117, 109, 98, + 101, 114, 32, 97, 116, 32, + 116, 104, 101, 32, 105, 110, + 100, 101, 120, 13, 10, 102, + 108, 111, 97, 116, 50, 32, + 82, 101, 97, 100, 83, 111, + 117, 114, 99, 101, 86, 97, + 108, 117, 101, 40, 117, 105, + 110, 116, 51, 32, 105, 110, + 100, 101, 120, 41, 13, 10, + 123, 13, 10, 32, 32, 32, + 32, 102, 108, 111, 97, 116, + 50, 32, 118, 97, 108, 117, + 101, 32, 61, 32, 102, 108, + 111, 97, 116, 50, 40, 48, + 44, 32, 48, 41, 59, 13, + 10, 13, 10, 32, 32, 32, + 32, 117, 105, 110, 116, 32, + 105, 110, 100, 101, 120, 82, + 101, 97, 108, 32, 61, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 105, 110, 100, + 101, 120, 46, 120, 32, 42, + 32, 73, 110, 112, 117, 116, + 83, 116, 114, 105, 100, 101, + 115, 91, 48, 93, 32, 43, + 13, 10, 32, 32, 32, 32, + 32, 32, 32, 32, 105, 110, + 100, 101, 120, 46, 121, 32, + 42, 32, 73, 110, 112, 117, + 116, 83, 116, 114, 105, 100, + 101, 115, 91, 49, 93, 32, + 43, 13, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 105, + 110, 100, 101, 120, 46, 122, + 32, 42, 32, 73, 110, 112, + 117, 116, 83, 116, 114, 105, + 100, 101, 115, 91, 50, 93, + 59, 13, 10, 32, 32, 32, + 32, 118, 97, 108, 117, 101, + 46, 120, 32, 61, 32, 115, + 114, 99, 91, 105, 110, 100, + 101, 120, 82, 101, 97, 108, + 93, 59, 13, 10, 13, 10, + 32, 32, 32, 32, 47, 47, + 32, 73, 102, 32, 114, 101, + 97, 108, 32, 118, 97, 108, + 117, 101, 100, 44, 32, 118, + 97, 108, 117, 101, 46, 121, + 32, 105, 115, 32, 100, 101, + 102, 97, 117, 108, 116, 101, + 100, 32, 116, 111, 32, 48, + 13, 10, 32, 32, 32, 32, + 47, 47, 32, 73, 102, 32, + 99, 111, 109, 112, 108, 101, + 120, 32, 118, 97, 108, 117, + 101, 100, 32, 105, 110, 112, + 117, 116, 44, 32, 97, 115, + 115, 105, 103, 110, 32, 116, + 104, 101, 32, 99, 111, 109, + 112, 108, 101, 120, 32, 112, + 97, 114, 116, 32, 116, 111, + 32, 110, 111, 110, 45, 122, + 101, 114, 111, 46, 46, 46, + 13, 10, 32, 32, 32, 32, + 105, 102, 32, 40, 73, 110, + 112, 117, 116, 83, 105, 122, + 101, 115, 91, 51, 93, 32, + 61, 61, 32, 50, 41, 32, + 123, 13, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 117, + 105, 110, 116, 32, 105, 110, + 100, 101, 120, 73, 109, 97, + 103, 105, 110, 97, 114, 121, + 32, 61, 32, 105, 110, 100, + 101, 120, 82, 101, 97, 108, + 32, 43, 32, 73, 110, 112, + 117, 116, 83, 116, 114, 105, + 100, 101, 115, 91, 51, 93, + 59, 13, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 118, + 97, 108, 117, 101, 46, 121, + 32, 61, 32, 115, 114, 99, + 91, 105, 110, 100, 101, 120, + 73, 109, 97, 103, 105, 110, + 97, 114, 121, 93, 59, 13, + 10, 32, 32, 32, 32, 125, + 13, 10, 13, 10, 32, 32, + 32, 32, 114, 101, 116, 117, + 114, 110, 32, 118, 97, 108, + 117, 101, 59, 13, 10, 125, + 13, 10, 13, 10, 117, 105, + 110, 116, 51, 32, 68, 101, + 99, 111, 109, 112, 111, 115, + 101, 73, 110, 100, 101, 120, + 40, 117, 105, 110, 116, 32, + 105, 110, 100, 101, 120, 41, + 13, 10, 123, 13, 10, 32, + 32, 32, 32, 117, 105, 110, + 116, 32, 116, 101, 109, 112, + 32, 61, 32, 105, 110, 100, + 101, 120, 32, 37, 32, 40, + 79, 117, 116, 112, 117, 116, + 83, 105, 122, 101, 115, 91, + 49, 93, 32, 42, 32, 79, + 117, 116, 112, 117, 116, 83, + 105, 122, 101, 115, 91, 50, + 93, 41, 59, 13, 10, 13, + 10, 32, 32, 32, 32, 117, + 105, 110, 116, 51, 32, 105, + 100, 120, 32, 61, 32, 117, + 105, 110, 116, 51, 40, 48, + 44, 32, 48, 44, 32, 48, + 41, 59, 13, 10, 32, 32, + 32, 32, 105, 100, 120, 46, + 120, 32, 61, 32, 105, 110, + 100, 101, 120, 32, 47, 32, + 40, 79, 117, 116, 112, 117, + 116, 83, 105, 122, 101, 115, + 91, 49, 93, 32, 42, 32, + 79, 117, 116, 112, 117, 116, + 83, 105, 122, 101, 115, 91, + 50, 93, 41, 59, 13, 10, + 32, 32, 32, 32, 105, 100, + 120, 46, 121, 32, 61, 32, + 116, 101, 109, 112, 32, 47, + 32, 79, 117, 116, 112, 117, + 116, 83, 105, 122, 101, 115, + 91, 50, 93, 59, 32, 47, + 47, 32, 84, 104, 105, 115, + 32, 99, 111, 114, 114, 101, + 115, 112, 111, 110, 100, 115, + 32, 116, 111, 32, 116, 104, + 101, 32, 115, 49, 39, 116, + 104, 32, 101, 108, 101, 109, + 101, 110, 116, 32, 111, 102, + 32, 116, 104, 101, 32, 100, + 102, 116, 32, 13, 10, 32, + 32, 32, 32, 105, 100, 120, + 46, 122, 32, 61, 32, 116, + 101, 109, 112, 32, 37, 32, + 79, 117, 116, 112, 117, 116, + 83, 105, 122, 101, 115, 91, + 50, 93, 59, 13, 10, 32, + 32, 32, 32, 114, 101, 116, + 117, 114, 110, 32, 105, 100, + 120, 59, 13, 10, 125, 13, + 10, 13, 10, 91, 110, 117, + 109, 116, 104, 114, 101, 97, + 100, 115, 40, 54, 52, 44, + 32, 49, 44, 32, 49, 41, + 93, 13, 10, 118, 111, 105, + 100, 32, 68, 70, 84, 40, + 117, 105, 110, 116, 51, 32, + 100, 116, 105, 100, 32, 58, + 32, 83, 86, 95, 68, 105, + 115, 112, 97, 116, 99, 104, + 84, 104, 114, 101, 97, 100, + 73, 100, 41, 13, 10, 123, + 13, 10, 32, 32, 32, 32, + 117, 105, 110, 116, 32, 105, + 110, 100, 101, 120, 32, 61, + 32, 83, 116, 97, 114, 116, + 73, 110, 100, 101, 120, 32, + 43, 32, 100, 116, 105, 100, + 46, 120, 59, 13, 10, 32, + 32, 32, 32, 105, 102, 32, + 40, 105, 110, 100, 101, 120, + 32, 60, 32, 69, 108, 101, + 109, 101, 110, 116, 67, 111, + 117, 110, 116, 41, 13, 10, + 32, 32, 32, 32, 123, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 117, 105, 110, + 116, 32, 105, 110, 112, 117, + 116, 76, 101, 110, 103, 116, + 104, 32, 61, 32, 73, 110, + 112, 117, 116, 83, 105, 122, + 101, 115, 91, 49, 93, 59, + 13, 10, 32, 32, 32, 32, + 32, 32, 32, 32, 117, 105, + 110, 116, 32, 104, 97, 108, + 102, 73, 110, 112, 117, 116, + 76, 101, 110, 103, 116, 104, + 32, 61, 32, 105, 110, 112, + 117, 116, 76, 101, 110, 103, + 116, 104, 32, 47, 32, 50, + 59, 13, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 117, + 105, 110, 116, 32, 78, 32, + 61, 32, 49, 32, 60, 60, + 32, 68, 70, 84, 73, 116, + 101, 114, 97, 116, 105, 111, + 110, 59, 13, 10, 32, 32, + 32, 32, 32, 32, 32, 32, + 117, 105, 110, 116, 32, 104, + 97, 108, 102, 78, 32, 61, + 32, 49, 32, 60, 60, 32, + 40, 68, 70, 84, 73, 116, + 101, 114, 97, 116, 105, 111, + 110, 32, 45, 32, 49, 41, + 59, 13, 10, 13, 10, 32, + 32, 32, 32, 32, 32, 32, + 32, 47, 47, 32, 71, 101, + 116, 32, 105, 110, 112, 117, + 116, 32, 101, 118, 101, 110, + 32, 97, 110, 100, 32, 111, + 100, 100, 32, 105, 110, 100, + 105, 99, 101, 115, 13, 10, + 32, 32, 32, 32, 32, 32, + 32, 32, 47, 47, 32, 68, + 101, 99, 111, 109, 112, 111, + 115, 101, 32, 116, 104, 101, + 32, 99, 117, 114, 114, 101, + 110, 116, 32, 105, 110, 100, + 101, 120, 32, 105, 110, 116, + 111, 32, 105, 116, 115, 32, + 108, 111, 99, 97, 116, 105, + 111, 110, 32, 105, 110, 32, + 116, 104, 101, 32, 112, 97, + 99, 107, 101, 100, 32, 116, + 101, 110, 115, 111, 114, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 117, 105, 110, + 116, 50, 32, 105, 110, 112, + 117, 116, 69, 118, 101, 110, + 79, 100, 100, 73, 110, 100, + 101, 120, 80, 97, 105, 114, + 32, 61, 32, 117, 105, 110, + 116, 50, 40, 48, 44, 32, + 48, 41, 59, 13, 10, 32, + 32, 32, 32, 32, 32, 32, + 32, 117, 105, 110, 116, 51, + 32, 105, 100, 120, 32, 61, + 32, 68, 101, 99, 111, 109, + 112, 111, 115, 101, 73, 110, + 100, 101, 120, 40, 105, 110, + 100, 101, 120, 41, 59, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 105, 110, 112, + 117, 116, 69, 118, 101, 110, + 79, 100, 100, 73, 110, 100, + 101, 120, 80, 97, 105, 114, + 46, 120, 32, 61, 32, 40, + 105, 100, 120, 46, 121, 32, + 62, 62, 32, 68, 70, 84, + 73, 116, 101, 114, 97, 116, + 105, 111, 110, 41, 32, 42, + 32, 104, 97, 108, 102, 78, + 32, 43, 32, 40, 105, 100, + 120, 46, 121, 32, 37, 32, + 104, 97, 108, 102, 78, 41, + 59, 13, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 105, + 110, 112, 117, 116, 69, 118, + 101, 110, 79, 100, 100, 73, + 110, 100, 101, 120, 80, 97, + 105, 114, 46, 121, 32, 61, + 32, 105, 110, 112, 117, 116, + 69, 118, 101, 110, 79, 100, + 100, 73, 110, 100, 101, 120, + 80, 97, 105, 114, 46, 120, + 32, 43, 32, 40, 105, 110, + 112, 117, 116, 76, 101, 110, + 103, 116, 104, 32, 47, 32, + 50, 41, 59, 13, 10, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 47, 47, 32, + 67, 114, 101, 97, 116, 101, + 32, 102, 117, 108, 108, 32, + 105, 110, 100, 101, 120, 32, + 102, 111, 114, 32, 101, 118, + 101, 110, 32, 97, 110, 100, + 32, 111, 100, 100, 32, 118, + 97, 108, 117, 101, 115, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 117, 105, 110, + 116, 51, 32, 105, 110, 112, + 117, 116, 69, 118, 101, 110, + 73, 100, 120, 32, 61, 32, + 117, 105, 110, 116, 51, 40, + 105, 100, 120, 46, 120, 44, + 32, 105, 110, 112, 117, 116, + 69, 118, 101, 110, 79, 100, + 100, 73, 110, 100, 101, 120, + 80, 97, 105, 114, 46, 120, + 44, 32, 105, 100, 120, 46, + 122, 41, 59, 13, 10, 32, + 32, 32, 32, 32, 32, 32, + 32, 117, 105, 110, 116, 51, + 32, 105, 110, 112, 117, 116, + 79, 100, 100, 73, 100, 120, + 32, 61, 32, 117, 105, 110, + 116, 51, 40, 105, 100, 120, + 46, 120, 44, 32, 105, 110, + 112, 117, 116, 69, 118, 101, + 110, 79, 100, 100, 73, 110, + 100, 101, 120, 80, 97, 105, + 114, 46, 121, 44, 32, 105, + 100, 120, 46, 122, 41, 59, + 13, 10, 13, 10, 32, 32, + 32, 32, 32, 32, 32, 32, + 47, 47, 32, 82, 101, 97, + 100, 32, 105, 110, 112, 117, + 116, 32, 101, 118, 101, 110, + 32, 97, 110, 100, 32, 111, + 100, 100, 32, 118, 97, 108, + 117, 101, 115, 13, 10, 32, + 32, 32, 32, 32, 32, 32, + 32, 102, 108, 111, 97, 116, + 50, 32, 105, 110, 112, 117, + 116, 69, 118, 101, 110, 86, + 97, 108, 117, 101, 32, 61, + 32, 82, 101, 97, 100, 83, + 111, 117, 114, 99, 101, 86, + 97, 108, 117, 101, 40, 105, + 110, 112, 117, 116, 69, 118, + 101, 110, 73, 100, 120, 41, + 59, 13, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 102, + 108, 111, 97, 116, 50, 32, + 105, 110, 112, 117, 116, 79, + 100, 100, 86, 97, 108, 117, + 101, 32, 61, 32, 82, 101, + 97, 100, 83, 111, 117, 114, + 99, 101, 86, 97, 108, 117, + 101, 40, 105, 110, 112, 117, + 116, 79, 100, 100, 73, 100, + 120, 41, 59, 13, 10, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 47, 47, 32, + 67, 114, 101, 97, 116, 101, + 32, 99, 111, 101, 102, 102, + 105, 99, 105, 101, 110, 116, + 13, 10, 32, 32, 32, 32, + 32, 32, 32, 32, 47, 47, + 32, 119, 40, 107, 44, 32, + 78, 41, 32, 61, 32, 101, + 94, 40, 105, 42, 50, 42, + 112, 105, 32, 42, 32, 107, + 32, 47, 32, 78, 41, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 117, 105, 110, + 116, 32, 107, 32, 61, 32, + 105, 100, 120, 46, 121, 32, + 37, 32, 78, 59, 13, 10, + 32, 32, 32, 32, 32, 32, + 32, 32, 115, 116, 97, 116, + 105, 99, 32, 99, 111, 110, + 115, 116, 32, 102, 108, 111, + 97, 116, 32, 80, 73, 32, + 61, 32, 51, 46, 49, 52, + 49, 53, 57, 50, 54, 53, + 102, 59, 13, 10, 32, 32, + 32, 32, 32, 32, 32, 32, + 115, 116, 97, 116, 105, 99, + 32, 99, 111, 110, 115, 116, + 32, 102, 108, 111, 97, 116, + 32, 84, 65, 85, 32, 61, + 32, 80, 73, 32, 42, 32, + 50, 59, 13, 10, 32, 32, + 32, 32, 32, 32, 32, 32, + 98, 111, 111, 108, 32, 105, + 115, 73, 110, 118, 101, 114, + 115, 101, 32, 61, 32, 73, + 115, 73, 110, 118, 101, 114, + 115, 101, 32, 61, 61, 32, + 49, 59, 13, 10, 32, 32, + 32, 32, 32, 32, 32, 32, + 99, 111, 110, 115, 116, 32, + 102, 108, 111, 97, 116, 32, + 105, 110, 118, 101, 114, 115, + 101, 95, 115, 119, 105, 116, + 99, 104, 32, 61, 32, 105, + 115, 73, 110, 118, 101, 114, + 115, 101, 32, 63, 32, 49, + 46, 102, 32, 58, 32, 45, + 49, 46, 102, 59, 13, 10, + 32, 32, 32, 32, 32, 32, + 32, 32, 102, 108, 111, 97, + 116, 32, 116, 104, 101, 116, + 97, 32, 61, 32, 105, 110, + 118, 101, 114, 115, 101, 95, + 115, 119, 105, 116, 99, 104, + 32, 42, 32, 84, 65, 85, + 32, 42, 32, 40, 102, 108, + 111, 97, 116, 41, 107, 32, + 47, 32, 40, 102, 108, 111, + 97, 116, 41, 78, 59, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 102, 108, 111, + 97, 116, 50, 32, 119, 32, + 61, 32, 102, 108, 111, 97, + 116, 50, 40, 99, 111, 115, + 40, 116, 104, 101, 116, 97, + 41, 44, 32, 115, 105, 110, + 40, 116, 104, 101, 116, 97, + 41, 41, 59, 13, 10, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 117, 105, 110, + 116, 50, 32, 111, 117, 116, + 112, 117, 116, 73, 110, 100, + 101, 120, 32, 61, 32, 67, + 111, 109, 112, 117, 116, 101, + 68, 101, 115, 116, 73, 110, + 100, 101, 120, 40, 105, 110, + 100, 101, 120, 41, 59, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 100, 115, 116, + 91, 111, 117, 116, 112, 117, + 116, 73, 110, 100, 101, 120, + 46, 120, 93, 32, 61, 32, + 83, 99, 97, 108, 101, 32, + 42, 32, 40, 105, 110, 112, + 117, 116, 69, 118, 101, 110, + 86, 97, 108, 117, 101, 46, + 120, 32, 43, 32, 40, 119, + 46, 120, 32, 42, 32, 105, + 110, 112, 117, 116, 79, 100, + 100, 86, 97, 108, 117, 101, + 46, 120, 32, 45, 32, 119, + 46, 121, 32, 42, 32, 105, + 110, 112, 117, 116, 79, 100, + 100, 86, 97, 108, 117, 101, + 46, 121, 41, 41, 59, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 100, 115, 116, + 91, 111, 117, 116, 112, 117, + 116, 73, 110, 100, 101, 120, + 46, 121, 93, 32, 61, 32, + 83, 99, 97, 108, 101, 32, + 42, 32, 40, 105, 110, 112, + 117, 116, 69, 118, 101, 110, + 86, 97, 108, 117, 101, 46, + 121, 32, 43, 32, 40, 119, + 46, 120, 32, 42, 32, 105, + 110, 112, 117, 116, 79, 100, + 100, 86, 97, 108, 117, 101, + 46, 121, 32, 43, 32, 119, + 46, 121, 32, 42, 32, 105, + 110, 112, 117, 116, 79, 100, + 100, 86, 97, 108, 117, 101, + 46, 120, 41, 41, 59, 13, + 10, 32, 32, 32, 32, 125, + 13, 10, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 254, 239, 254, 239, + 1, 0, 0, 0, 174, 13, + 0, 0, 0, 69, 58, 92, + 119, 111, 114, 107, 92, 87, + 105, 110, 100, 111, 119, 115, + 45, 77, 97, 99, 104, 105, + 110, 101, 45, 76, 101, 97, + 114, 110, 105, 110, 103, 92, + 83, 97, 109, 112, 108, 101, + 115, 92, 67, 117, 115, 116, + 111, 109, 79, 112, 101, 114, + 97, 116, 111, 114, 92, 100, + 101, 115, 107, 116, 111, 112, + 92, 99, 112, 112, 92, 111, + 112, 101, 114, 97, 116, 111, + 114, 115, 92, 115, 116, 111, + 99, 107, 104, 97, 109, 46, + 104, 108, 115, 108, 0, 0, + 101, 58, 92, 119, 111, 114, + 107, 92, 119, 105, 110, 100, + 111, 119, 115, 45, 109, 97, + 99, 104, 105, 110, 101, 45, + 108, 101, 97, 114, 110, 105, + 110, 103, 92, 115, 97, 109, + 112, 108, 101, 115, 92, 99, + 117, 115, 116, 111, 109, 111, + 112, 101, 114, 97, 116, 111, + 114, 92, 100, 101, 115, 107, + 116, 111, 112, 92, 99, 112, + 112, 92, 111, 112, 101, 114, + 97, 116, 111, 114, 115, 92, + 115, 116, 111, 99, 107, 104, + 97, 109, 46, 104, 108, 115, + 108, 0, 82, 87, 83, 116, + 114, 117, 99, 116, 117, 114, + 101, 100, 66, 117, 102, 102, + 101, 114, 60, 102, 108, 111, + 97, 116, 62, 32, 115, 114, + 99, 32, 58, 32, 114, 101, + 103, 105, 115, 116, 101, 114, + 40, 117, 48, 41, 59, 13, + 10, 82, 87, 83, 116, 114, + 117, 99, 116, 117, 114, 101, + 100, 66, 117, 102, 102, 101, + 114, 60, 102, 108, 111, 97, + 116, 62, 32, 100, 115, 116, + 32, 58, 32, 114, 101, 103, + 105, 115, 116, 101, 114, 40, + 117, 49, 41, 59, 13, 10, + 13, 10, 99, 98, 117, 102, + 102, 101, 114, 32, 67, 111, + 110, 115, 116, 97, 110, 116, + 115, 13, 10, 123, 13, 10, + 32, 32, 32, 32, 117, 105, + 110, 116, 32, 83, 116, 97, + 114, 116, 73, 110, 100, 101, + 120, 59, 13, 10, 32, 32, + 32, 32, 117, 105, 110, 116, + 32, 69, 108, 101, 109, 101, + 110, 116, 67, 111, 117, 110, + 116, 59, 13, 10, 32, 32, + 32, 32, 117, 105, 110, 116, + 32, 68, 70, 84, 73, 116, + 101, 114, 97, 116, 105, 111, + 110, 59, 13, 10, 32, 32, + 32, 32, 117, 105, 110, 116, + 32, 73, 115, 73, 110, 118, + 101, 114, 115, 101, 59, 13, + 10, 32, 32, 32, 32, 117, + 105, 110, 116, 52, 32, 73, + 110, 112, 117, 116, 83, 105, + 122, 101, 115, 59, 13, 10, + 32, 32, 32, 32, 117, 105, + 110, 116, 52, 32, 73, 110, + 112, 117, 116, 83, 116, 114, + 105, 100, 101, 115, 59, 13, + 10, 32, 32, 32, 32, 117, + 105, 110, 116, 52, 32, 79, + 117, 116, 112, 117, 116, 83, + 105, 122, 101, 115, 59, 13, + 10, 32, 32, 32, 32, 117, + 105, 110, 116, 52, 32, 79, + 117, 116, 112, 117, 116, 83, + 116, 114, 105, 100, 101, 115, + 59, 13, 10, 32, 32, 32, + 32, 102, 108, 111, 27, 226, + 48, 1, 128, 0, 0, 0, + 138, 231, 138, 201, 56, 180, + 216, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 2, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 94, 0, + 0, 0, 40, 0, 0, 0, + 27, 226, 48, 1, 210, 98, + 221, 138, 243, 12, 0, 0, + 1, 0, 0, 0, 93, 0, + 0, 0, 94, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 66, 0, + 60, 17, 16, 1, 0, 0, + 0, 1, 10, 0, 1, 0, + 194, 0, 240, 85, 10, 0, + 1, 0, 194, 0, 240, 85, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 0, 0, + 50, 0, 61, 17, 1, 104, + 108, 115, 108, 70, 108, 97, + 103, 115, 0, 48, 120, 53, + 0, 104, 108, 115, 108, 84, + 97, 114, 103, 101, 116, 0, + 99, 115, 95, 53, 95, 48, + 0, 104, 108, 115, 108, 69, + 110, 116, 114, 121, 0, 68, + 70, 84, 0, 0, 42, 0, + 16, 17, 0, 0, 0, 0, + 8, 16, 0, 0, 0, 0, + 0, 0, 60, 10, 0, 0, + 0, 0, 0, 0, 60, 10, + 0, 0, 3, 16, 0, 0, + 92, 0, 0, 0, 1, 0, + 160, 68, 70, 84, 0, 0, + 42, 0, 62, 17, 0, 16, + 0, 0, 9, 0, 100, 116, + 105, 100, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 80, 17, + 32, 0, 5, 0, 0, 0, + 4, 0, 92, 0, 0, 0, + 1, 0, 60, 10, 176, 255, + 255, 255, 22, 0, 80, 17, + 32, 0, 5, 0, 4, 0, + 4, 0, 92, 0, 0, 0, + 1, 0, 60, 10, 180, 255, + 255, 255, 22, 0, 80, 17, + 32, 0, 5, 0, 8, 0, + 4, 0, 92, 0, 0, 0, + 1, 0, 60, 10, 184, 255, + 255, 255, 46, 0, 62, 17, + 117, 0, 0, 0, 0, 0, + 105, 110, 100, 101, 120, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 1, 0, 0, 0, + 4, 0, 140, 0, 0, 0, + 1, 0, 160, 8, 4, 0, + 0, 0, 50, 0, 62, 17, + 117, 0, 0, 0, 0, 0, + 105, 110, 112, 117, 116, 76, + 101, 110, 103, 116, 104, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 1, 0, 0, 0, 4, 0, + 208, 0, 0, 0, 1, 0, + 136, 2, 8, 0, 0, 0, + 42, 0, 62, 17, 117, 0, + 0, 0, 0, 0, 78, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 1, 0, 0, 0, + 4, 0, 4, 1, 0, 0, + 1, 0, 68, 8, 12, 0, + 0, 0, 46, 0, 62, 17, + 117, 0, 0, 0, 0, 0, + 104, 97, 108, 102, 78, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 1, 0, 0, 0, + 4, 0, 104, 1, 0, 0, + 1, 0, 160, 1, 16, 0, + 0, 0, 62, 0, 62, 17, + 4, 16, 0, 0, 8, 0, + 105, 110, 112, 117, 116, 69, + 118, 101, 110, 79, 100, 100, + 73, 110, 100, 101, 120, 80, + 97, 105, 114, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 0, 0, 4, 0, + 36, 3, 0, 0, 1, 0, + 148, 2, 20, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 4, 0, 4, 0, + 116, 3, 0, 0, 1, 0, + 32, 7, 52, 0, 0, 0, + 42, 0, 62, 17, 0, 16, + 0, 0, 8, 0, 105, 100, + 120, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 5, 0, 0, 0, + 4, 0, 168, 2, 0, 0, + 1, 0, 12, 6, 32, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 5, 0, 4, 0, + 4, 0, 168, 2, 0, 0, + 1, 0, 44, 6, 36, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 5, 0, 8, 0, + 4, 0, 168, 2, 0, 0, + 1, 0, 236, 7, 40, 0, + 0, 0, 50, 0, 62, 17, + 0, 16, 0, 0, 8, 0, + 105, 110, 112, 117, 116, 69, + 118, 101, 110, 73, 100, 120, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 0, 0, 4, 0, + 136, 3, 0, 0, 1, 0, + 176, 0, 16, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 8, 0, 4, 0, + 136, 3, 0, 0, 1, 0, + 120, 2, 24, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 4, 0, 4, 0, + 156, 3, 0, 0, 1, 0, + 28, 2, 20, 0, 0, 0, + 50, 0, 62, 17, 0, 16, + 0, 0, 8, 0, 105, 110, + 112, 117, 116, 79, 100, 100, + 73, 100, 120, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, + 80, 17, 0, 0, 5, 0, + 0, 0, 4, 0, 176, 3, + 0, 0, 1, 0, 228, 6, + 48, 0, 0, 0, 22, 0, + 80, 17, 0, 0, 5, 0, + 8, 0, 4, 0, 176, 3, + 0, 0, 1, 0, 228, 6, + 56, 0, 0, 0, 22, 0, + 80, 17, 0, 0, 5, 0, + 4, 0, 4, 0, 196, 3, + 0, 0, 1, 0, 208, 6, + 52, 0, 0, 0, 54, 0, + 62, 17, 5, 16, 0, 0, + 8, 0, 105, 110, 112, 117, + 116, 69, 118, 101, 110, 86, + 97, 108, 117, 101, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 0, 0, 4, 0, + 140, 5, 0, 0, 1, 0, + 8, 5, 64, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 4, 0, 4, 0, + 140, 5, 0, 0, 1, 0, + 8, 5, 68, 0, 0, 0, + 54, 0, 62, 17, 5, 16, + 0, 0, 8, 0, 105, 110, + 112, 117, 116, 79, 100, 100, + 86, 97, 108, 117, 101, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 5, 0, 0, 0, + 4, 0, 84, 7, 0, 0, + 1, 0, 64, 3, 16, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 5, 0, 4, 0, + 4, 0, 84, 7, 0, 0, + 1, 0, 64, 3, 20, 0, + 0, 0, 42, 0, 62, 17, + 117, 0, 0, 0, 0, 0, + 107, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, + 80, 17, 0, 0, 1, 0, + 0, 0, 4, 0, 116, 7, + 0, 0, 1, 0, 136, 0, + 8, 0, 0, 0, 42, 0, + 62, 17, 6, 16, 0, 0, + 0, 0, 84, 65, 85, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 1, 0, 0, 0, 4, 0, + 112, 0, 0, 0, 1, 0, + 120, 7, 0, 0, 0, 0, + 50, 0, 62, 17, 98, 0, + 0, 0, 0, 0, 105, 115, + 73, 110, 118, 101, 114, 115, + 101, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, + 80, 17, 0, 0, 1, 0, + 0, 0, 4, 0, 168, 7, + 0, 0, 1, 0, 36, 0, + 24, 0, 0, 0, 54, 0, + 62, 17, 6, 16, 0, 0, + 0, 0, 105, 110, 118, 101, + 114, 115, 101, 95, 115, 119, + 105, 116, 99, 104, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 1, 0, 0, 0, 4, 0, + 204, 7, 0, 0, 1, 0, + 200, 2, 24, 0, 0, 0, + 46, 0, 62, 17, 64, 0, + 0, 0, 0, 0, 116, 104, + 101, 116, 97, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 1, 0, 0, 0, 4, 0, + 72, 8, 0, 0, 1, 0, + 48, 0, 0, 0, 0, 0, + 42, 0, 62, 17, 5, 16, + 0, 0, 8, 0, 119, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 5, 0, 0, 0, + 4, 0, 96, 8, 0, 0, + 1, 0, 52, 2, 8, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 5, 0, 4, 0, + 4, 0, 120, 8, 0, 0, + 1, 0, 156, 1, 0, 0, + 0, 0, 50, 0, 62, 17, + 4, 16, 0, 0, 8, 0, + 111, 117, 116, 112, 117, 116, + 73, 110, 100, 101, 120, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 0, 0, 4, 0, + 16, 9, 0, 0, 1, 0, + 132, 1, 32, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 4, 0, 4, 0, + 16, 9, 0, 0, 1, 0, + 132, 1, 36, 0, 0, 0, + 102, 0, 77, 17, 124, 0, + 0, 0, 12, 9, 0, 0, + 0, 16, 0, 0, 7, 0, + 9, 5, 13, 58, 6, 2, + 3, 129, 36, 13, 54, 6, + 6, 3, 72, 13, 34, 6, + 2, 3, 72, 6, 2, 3, + 36, 13, 15, 6, 2, 12, + 60, 36, 8, 0, 9, 26, + 13, 56, 1, 129, 128, 6, + 13, 3, 0, 9, 17, 13, + 57, 3, 40, 9, 22, 13, + 52, 6, 6, 3, 32, 9, + 13, 13, 53, 3, 40, 13, + 33, 6, 2, 3, 32, 6, + 2, 3, 36, 9, 5, 13, + 15, 6, 2, 12, 60, 36, + 0, 0, 70, 0, 62, 17, + 8, 16, 0, 0, 136, 0, + 60, 68, 101, 99, 111, 109, + 112, 111, 115, 101, 73, 110, + 100, 101, 120, 32, 114, 101, + 116, 117, 114, 110, 32, 118, + 97, 108, 117, 101, 62, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 5, 0, 0, 0, + 4, 0, 108, 2, 0, 0, + 1, 0, 60, 0, 32, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 5, 0, 4, 0, + 4, 0, 128, 2, 0, 0, + 1, 0, 40, 0, 36, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 5, 0, 8, 0, + 4, 0, 148, 2, 0, 0, + 1, 0, 20, 0, 40, 0, + 0, 0, 46, 0, 62, 17, + 117, 0, 0, 0, 1, 0, + 105, 110, 100, 101, 120, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 1, 0, 0, 0, + 4, 0, 128, 1, 0, 0, + 1, 0, 40, 1, 4, 0, + 0, 0, 42, 0, 62, 17, + 117, 0, 0, 0, 0, 0, + 116, 101, 109, 112, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, + 80, 17, 0, 0, 1, 0, + 0, 0, 4, 0, 200, 1, + 0, 0, 1, 0, 224, 0, + 20, 0, 0, 0, 42, 0, + 62, 17, 0, 16, 0, 0, + 8, 0, 105, 100, 120, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 0, 0, 4, 0, + 16, 2, 0, 0, 1, 0, + 152, 0, 32, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 4, 0, 4, 0, + 52, 2, 0, 0, 1, 0, + 116, 0, 36, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 8, 0, 4, 0, + 88, 2, 0, 0, 1, 0, + 80, 0, 40, 0, 0, 0, + 2, 0, 78, 17, 174, 0, + 77, 17, 124, 0, 0, 0, + 172, 11, 0, 0, 1, 16, + 0, 0, 7, 0, 9, 5, + 13, 32, 6, 2, 3, 131, + 128, 7, 3, 13, 34, 6, + 4, 3, 20, 7, 0, 13, + 29, 6, 8, 3, 128, 164, + 13, 27, 6, 8, 3, 44, + 9, 9, 13, 58, 6, 2, + 3, 64, 13, 38, 6, 2, + 3, 32, 9, 5, 13, 5, + 6, 2, 3, 44, 13, 17, + 11, 68, 4, 40, 8, 0, + 9, 20, 13, 31, 1, 131, + 220, 6, 31, 3, 0, 9, + 9, 13, 33, 6, 6, 3, + 20, 6, 2, 3, 36, 7, + 1, 6, 3, 3, 36, 7, + 0, 6, 4, 3, 28, 7, + 2, 6, 5, 3, 36, 7, + 0, 9, 15, 13, 28, 6, + 6, 3, 28, 9, 9, 13, + 26, 6, 8, 3, 44, 9, + 5, 13, 27, 3, 52, 9, + 31, 13, 57, 11, 44, 9, + 19, 13, 37, 6, 2, 3, + 32, 9, 5, 13, 5, 6, + 2, 3, 44, 13, 17, 11, + 68, 4, 40, 0, 0, 0, + 70, 0, 62, 17, 10, 16, + 0, 0, 136, 0, 60, 82, + 101, 97, 100, 83, 111, 117, + 114, 99, 101, 86, 97, 108, + 117, 101, 32, 114, 101, 116, + 117, 114, 110, 32, 118, 97, + 108, 117, 101, 62, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 0, 0, 4, 0, + 100, 5, 0, 0, 1, 0, + 40, 0, 64, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 4, 0, 4, 0, + 120, 5, 0, 0, 1, 0, + 20, 0, 68, 0, 0, 0, + 46, 0, 62, 17, 0, 16, + 0, 0, 9, 0, 105, 110, + 100, 101, 120, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 0, 0, 4, 0, + 220, 3, 0, 0, 1, 0, + 92, 0, 16, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 4, 0, 4, 0, + 220, 3, 0, 0, 1, 0, + 176, 1, 20, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 8, 0, 4, 0, + 220, 3, 0, 0, 1, 0, + 176, 1, 24, 0, 0, 0, + 46, 0, 62, 17, 5, 16, + 0, 0, 8, 0, 118, 97, + 108, 117, 101, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 4, 0, 4, 0, + 240, 3, 0, 0, 1, 0, + 156, 1, 68, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 0, 0, 4, 0, + 192, 4, 0, 0, 1, 0, + 204, 0, 64, 0, 0, 0, + 50, 0, 62, 17, 117, 0, + 0, 0, 0, 0, 105, 110, + 100, 101, 120, 82, 101, 97, + 108, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, + 80, 17, 0, 0, 1, 0, + 0, 0, 4, 0, 148, 4, + 0, 0, 1, 0, 140, 0, + 8, 0, 0, 0, 54, 0, + 62, 17, 117, 0, 0, 0, + 0, 0, 105, 110, 100, 101, + 120, 73, 109, 97, 103, 105, + 110, 97, 114, 121, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 1, 0, 0, 0, 4, 0, + 32, 5, 0, 0, 1, 0, + 48, 0, 8, 0, 0, 0, + 2, 0, 78, 17, 174, 0, + 77, 17, 124, 0, 0, 0, + 148, 14, 0, 0, 1, 16, + 0, 0, 7, 0, 9, 5, + 13, 32, 6, 2, 3, 133, + 72, 7, 3, 13, 34, 6, + 4, 3, 20, 7, 0, 13, + 29, 6, 8, 3, 128, 164, + 13, 27, 6, 8, 3, 44, + 9, 9, 13, 58, 6, 2, + 3, 64, 13, 38, 6, 2, + 3, 32, 9, 5, 13, 5, + 6, 2, 3, 44, 13, 17, + 11, 68, 4, 40, 8, 0, + 9, 20, 13, 31, 1, 133, + 164, 6, 31, 3, 0, 9, + 9, 13, 33, 6, 6, 3, + 20, 6, 2, 3, 36, 7, + 1, 6, 3, 3, 36, 7, + 0, 6, 4, 3, 28, 7, + 2, 6, 5, 3, 36, 7, + 0, 9, 15, 13, 28, 6, + 6, 3, 28, 9, 9, 13, + 26, 6, 8, 3, 44, 9, + 5, 13, 27, 3, 52, 9, + 31, 13, 57, 11, 44, 9, + 19, 13, 37, 6, 2, 3, + 32, 9, 5, 13, 5, 6, + 2, 3, 44, 13, 17, 11, + 68, 4, 40, 0, 0, 0, + 70, 0, 62, 17, 10, 16, + 0, 0, 136, 0, 60, 82, + 101, 97, 100, 83, 111, 117, + 114, 99, 101, 86, 97, 108, + 117, 101, 32, 114, 101, 116, + 117, 114, 110, 32, 118, 97, + 108, 117, 101, 62, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 0, 0, 4, 0, + 164, 5, 0, 0, 1, 0, + 136, 1, 64, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 4, 0, 4, 0, + 164, 5, 0, 0, 1, 0, + 156, 1, 68, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 0, 0, 4, 0, + 44, 7, 0, 0, 1, 0, + 40, 0, 16, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 4, 0, 4, 0, + 64, 7, 0, 0, 1, 0, + 20, 0, 20, 0, 0, 0, + 46, 0, 62, 17, 0, 16, + 0, 0, 9, 0, 105, 110, + 100, 101, 120, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 0, 0, 4, 0, + 164, 5, 0, 0, 1, 0, + 176, 1, 48, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 4, 0, 4, 0, + 164, 5, 0, 0, 1, 0, + 176, 1, 52, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 8, 0, 4, 0, + 164, 5, 0, 0, 1, 0, + 176, 1, 56, 0, 0, 0, + 46, 0, 62, 17, 5, 16, + 0, 0, 8, 0, 118, 97, + 108, 117, 101, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 4, 0, 4, 0, + 164, 5, 0, 0, 1, 0, + 20, 0, 68, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 4, 0, 4, 0, + 184, 5, 0, 0, 1, 0, + 156, 1, 20, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 0, 0, 4, 0, + 136, 6, 0, 0, 1, 0, + 204, 0, 16, 0, 0, 0, + 50, 0, 62, 17, 117, 0, + 0, 0, 0, 0, 105, 110, + 100, 101, 120, 82, 101, 97, + 108, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, + 80, 17, 0, 0, 1, 0, + 0, 0, 4, 0, 92, 6, + 0, 0, 1, 0, 140, 0, + 8, 0, 0, 0, 54, 0, + 62, 17, 117, 0, 0, 0, + 0, 0, 105, 110, 100, 101, + 120, 73, 109, 97, 103, 105, + 110, 97, 114, 121, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 1, 0, 0, 0, 4, 0, + 232, 6, 0, 0, 1, 0, + 48, 0, 8, 0, 0, 0, + 2, 0, 78, 17, 66, 0, + 77, 17, 124, 0, 0, 0, + 4, 16, 0, 0, 2, 16, + 0, 0, 7, 0, 9, 5, + 13, 62, 6, 2, 3, 136, + 52, 13, 59, 6, 2, 3, + 36, 13, 26, 6, 2, 12, + 40, 32, 8, 0, 9, 34, + 13, 57, 1, 136, 144, 11, + 80, 9, 24, 13, 58, 6, + 2, 3, 36, 9, 5, 13, + 26, 6, 2, 12, 40, 32, + 70, 0, 62, 17, 12, 16, + 0, 0, 136, 0, 60, 67, + 111, 109, 112, 117, 116, 101, + 68, 101, 115, 116, 73, 110, + 100, 101, 120, 32, 114, 101, + 116, 117, 114, 110, 32, 118, + 97, 108, 117, 101, 62, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 0, 0, 4, 0, + 232, 8, 0, 0, 1, 0, + 40, 0, 32, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 5, 0, 4, 0, 4, 0, + 252, 8, 0, 0, 1, 0, + 20, 0, 36, 0, 0, 0, + 46, 0, 62, 17, 117, 0, + 0, 0, 1, 0, 105, 110, + 100, 101, 120, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 80, 17, 0, 0, + 1, 0, 0, 0, 4, 0, + 144, 8, 0, 0, 1, 0, + 128, 0, 4, 0, 0, 0, + 54, 0, 62, 17, 4, 16, + 0, 0, 8, 0, 100, 102, + 116, 79, 117, 116, 112, 117, + 116, 73, 110, 100, 101, 120, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 5, 0, 0, 0, + 4, 0, 180, 8, 0, 0, + 1, 0, 92, 0, 32, 0, + 0, 0, 22, 0, 80, 17, + 0, 0, 5, 0, 4, 0, + 4, 0, 212, 8, 0, 0, + 1, 0, 60, 0, 36, 0, + 0, 0, 2, 0, 78, 17, + 2, 0, 6, 0, 244, 0, + 0, 0, 24, 0, 0, 0, + 1, 0, 0, 0, 16, 1, + 23, 26, 104, 54, 129, 172, + 92, 45, 252, 216, 178, 20, + 79, 165, 191, 27, 0, 0, + 242, 0, 0, 0, 192, 9, + 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 152, 10, + 0, 0, 0, 0, 0, 0, + 206, 0, 0, 0, 180, 9, + 0, 0, 92, 0, 0, 0, + 87, 0, 0, 128, 92, 0, + 0, 0, 87, 0, 0, 0, + 112, 0, 0, 0, 60, 0, + 0, 128, 112, 0, 0, 0, + 60, 0, 0, 0, 140, 0, + 0, 0, 61, 0, 0, 128, + 140, 0, 0, 0, 61, 0, + 0, 0, 172, 0, 0, 0, + 61, 0, 0, 128, 172, 0, + 0, 0, 61, 0, 0, 0, + 184, 0, 0, 0, 63, 0, + 0, 128, 184, 0, 0, 0, + 63, 0, 0, 0, 208, 0, + 0, 0, 65, 0, 0, 128, + 208, 0, 0, 0, 65, 0, + 0, 0, 232, 0, 0, 0, + 65, 0, 0, 128, 232, 0, + 0, 0, 65, 0, 0, 0, + 4, 1, 0, 0, 66, 0, + 0, 128, 4, 1, 0, 0, + 66, 0, 0, 0, 24, 1, + 0, 0, 66, 0, 0, 128, + 24, 1, 0, 0, 66, 0, + 0, 0, 44, 1, 0, 0, + 66, 0, 0, 128, 44, 1, + 0, 0, 66, 0, 0, 0, + 76, 1, 0, 0, 66, 0, + 0, 128, 76, 1, 0, 0, + 66, 0, 0, 0, 104, 1, + 0, 0, 71, 0, 0, 128, + 104, 1, 0, 0, 71, 0, + 0, 0, 108, 1, 0, 0, + 71, 0, 0, 128, 108, 1, + 0, 0, 71, 0, 0, 0, + 128, 1, 0, 0, 71, 0, + 0, 128, 128, 1, 0, 0, + 71, 0, 0, 0, 168, 1, + 0, 0, 71, 0, 0, 128, + 168, 1, 0, 0, 71, 0, + 0, 0, 200, 1, 0, 0, + 71, 0, 0, 128, 200, 1, + 0, 0, 71, 0, 0, 0, + 240, 1, 0, 0, 71, 0, + 0, 128, 240, 1, 0, 0, + 71, 0, 0, 0, 16, 2, + 0, 0, 71, 0, 0, 128, + 16, 2, 0, 0, 71, 0, + 0, 0, 52, 2, 0, 0, + 71, 0, 0, 128, 52, 2, + 0, 0, 71, 0, 0, 0, + 88, 2, 0, 0, 71, 0, + 0, 128, 88, 2, 0, 0, + 71, 0, 0, 0, 108, 2, + 0, 0, 71, 0, 0, 128, + 108, 2, 0, 0, 71, 0, + 0, 0, 128, 2, 0, 0, + 71, 0, 0, 128, 128, 2, + 0, 0, 71, 0, 0, 0, + 148, 2, 0, 0, 71, 0, + 0, 128, 148, 2, 0, 0, + 71, 0, 0, 0, 168, 2, + 0, 0, 72, 0, 0, 128, + 168, 2, 0, 0, 72, 0, + 0, 0, 200, 2, 0, 0, + 72, 0, 0, 128, 200, 2, + 0, 0, 72, 0, 0, 0, + 232, 2, 0, 0, 72, 0, + 0, 128, 232, 2, 0, 0, + 72, 0, 0, 0, 8, 3, + 0, 0, 72, 0, 0, 128, + 8, 3, 0, 0, 72, 0, + 0, 0, 36, 3, 0, 0, + 73, 0, 0, 128, 36, 3, + 0, 0, 73, 0, 0, 0, + 56, 3, 0, 0, 73, 0, + 0, 128, 56, 3, 0, 0, + 73, 0, 0, 0, 88, 3, + 0, 0, 73, 0, 0, 128, + 88, 3, 0, 0, 73, 0, + 0, 0, 116, 3, 0, 0, + 76, 0, 0, 128, 116, 3, + 0, 0, 76, 0, 0, 0, + 136, 3, 0, 0, 76, 0, + 0, 128, 136, 3, 0, 0, + 76, 0, 0, 0, 156, 3, + 0, 0, 77, 0, 0, 128, + 156, 3, 0, 0, 77, 0, + 0, 0, 176, 3, 0, 0, + 77, 0, 0, 128, 176, 3, + 0, 0, 77, 0, 0, 0, + 196, 3, 0, 0, 80, 0, + 0, 128, 196, 3, 0, 0, + 80, 0, 0, 0, 200, 3, + 0, 0, 80, 0, 0, 128, + 200, 3, 0, 0, 80, 0, + 0, 0, 220, 3, 0, 0, + 80, 0, 0, 128, 220, 3, + 0, 0, 80, 0, 0, 0, + 240, 3, 0, 0, 80, 0, + 0, 128, 240, 3, 0, 0, + 80, 0, 0, 0, 20, 4, + 0, 0, 80, 0, 0, 128, + 20, 4, 0, 0, 80, 0, + 0, 0, 56, 4, 0, 0, + 80, 0, 0, 128, 56, 4, + 0, 0, 80, 0, 0, 0, + 84, 4, 0, 0, 80, 0, + 0, 128, 84, 4, 0, 0, + 80, 0, 0, 0, 120, 4, + 0, 0, 80, 0, 0, 128, + 120, 4, 0, 0, 80, 0, + 0, 0, 148, 4, 0, 0, + 80, 0, 0, 128, 148, 4, + 0, 0, 80, 0, 0, 0, + 192, 4, 0, 0, 80, 0, + 0, 128, 192, 4, 0, 0, + 80, 0, 0, 0, 212, 4, + 0, 0, 80, 0, 0, 128, + 212, 4, 0, 0, 80, 0, + 0, 0, 244, 4, 0, 0, + 80, 0, 0, 128, 244, 4, + 0, 0, 80, 0, 0, 0, + 0, 5, 0, 0, 80, 0, + 0, 128, 0, 5, 0, 0, + 80, 0, 0, 0, 32, 5, + 0, 0, 80, 0, 0, 128, + 32, 5, 0, 0, 80, 0, + 0, 0, 76, 5, 0, 0, + 80, 0, 0, 128, 76, 5, + 0, 0, 80, 0, 0, 0, + 80, 5, 0, 0, 80, 0, + 0, 128, 80, 5, 0, 0, + 80, 0, 0, 0, 100, 5, + 0, 0, 80, 0, 0, 128, + 100, 5, 0, 0, 80, 0, + 0, 0, 120, 5, 0, 0, + 80, 0, 0, 128, 120, 5, + 0, 0, 80, 0, 0, 0, + 140, 5, 0, 0, 81, 0, + 0, 128, 140, 5, 0, 0, + 81, 0, 0, 0, 144, 5, + 0, 0, 81, 0, 0, 128, + 144, 5, 0, 0, 81, 0, + 0, 0, 164, 5, 0, 0, + 81, 0, 0, 128, 164, 5, + 0, 0, 81, 0, 0, 0, + 184, 5, 0, 0, 81, 0, + 0, 128, 184, 5, 0, 0, + 81, 0, 0, 0, 220, 5, + 0, 0, 81, 0, 0, 128, + 220, 5, 0, 0, 81, 0, + 0, 0, 0, 6, 0, 0, + 81, 0, 0, 128, 0, 6, + 0, 0, 81, 0, 0, 0, + 28, 6, 0, 0, 81, 0, + 0, 128, 28, 6, 0, 0, + 81, 0, 0, 0, 64, 6, + 0, 0, 81, 0, 0, 128, + 64, 6, 0, 0, 81, 0, + 0, 0, 92, 6, 0, 0, + 81, 0, 0, 128, 92, 6, + 0, 0, 81, 0, 0, 0, + 136, 6, 0, 0, 81, 0, + 0, 128, 136, 6, 0, 0, + 81, 0, 0, 0, 156, 6, + 0, 0, 81, 0, 0, 128, + 156, 6, 0, 0, 81, 0, + 0, 0, 188, 6, 0, 0, + 81, 0, 0, 128, 188, 6, + 0, 0, 81, 0, 0, 0, + 200, 6, 0, 0, 81, 0, + 0, 128, 200, 6, 0, 0, + 81, 0, 0, 0, 232, 6, + 0, 0, 81, 0, 0, 128, + 232, 6, 0, 0, 81, 0, + 0, 0, 20, 7, 0, 0, + 81, 0, 0, 128, 20, 7, + 0, 0, 81, 0, 0, 0, + 24, 7, 0, 0, 81, 0, + 0, 128, 24, 7, 0, 0, + 81, 0, 0, 0, 44, 7, + 0, 0, 81, 0, 0, 128, + 44, 7, 0, 0, 81, 0, + 0, 0, 64, 7, 0, 0, + 81, 0, 0, 128, 64, 7, + 0, 0, 81, 0, 0, 0, + 84, 7, 0, 0, 85, 0, + 0, 128, 84, 7, 0, 0, + 85, 0, 0, 0, 116, 7, + 0, 0, 88, 0, 0, 128, + 116, 7, 0, 0, 88, 0, + 0, 0, 136, 7, 0, 0, + 88, 0, 0, 128, 136, 7, + 0, 0, 88, 0, 0, 0, + 168, 7, 0, 0, 89, 0, + 0, 128, 168, 7, 0, 0, + 89, 0, 0, 0, 204, 7, + 0, 0, 90, 0, 0, 128, + 204, 7, 0, 0, 90, 0, + 0, 0, 232, 7, 0, 0, + 90, 0, 0, 128, 232, 7, + 0, 0, 90, 0, 0, 0, + 252, 7, 0, 0, 90, 0, + 0, 128, 252, 7, 0, 0, + 90, 0, 0, 0, 24, 8, + 0, 0, 90, 0, 0, 128, + 24, 8, 0, 0, 90, 0, + 0, 0, 44, 8, 0, 0, + 90, 0, 0, 128, 44, 8, + 0, 0, 90, 0, 0, 0, + 72, 8, 0, 0, 91, 0, + 0, 128, 72, 8, 0, 0, + 91, 0, 0, 0, 96, 8, + 0, 0, 91, 0, 0, 128, + 96, 8, 0, 0, 91, 0, + 0, 0, 120, 8, 0, 0, + 93, 0, 0, 128, 120, 8, + 0, 0, 93, 0, 0, 0, + 124, 8, 0, 0, 93, 0, + 0, 128, 124, 8, 0, 0, + 93, 0, 0, 0, 144, 8, + 0, 0, 93, 0, 0, 128, + 144, 8, 0, 0, 93, 0, + 0, 0, 180, 8, 0, 0, + 93, 0, 0, 128, 180, 8, + 0, 0, 93, 0, 0, 0, + 212, 8, 0, 0, 93, 0, + 0, 128, 212, 8, 0, 0, + 93, 0, 0, 0, 232, 8, + 0, 0, 93, 0, 0, 128, + 232, 8, 0, 0, 93, 0, + 0, 0, 252, 8, 0, 0, + 93, 0, 0, 128, 252, 8, + 0, 0, 93, 0, 0, 0, + 16, 9, 0, 0, 94, 0, + 0, 128, 16, 9, 0, 0, + 94, 0, 0, 0, 44, 9, + 0, 0, 94, 0, 0, 128, + 44, 9, 0, 0, 94, 0, + 0, 0, 72, 9, 0, 0, + 94, 0, 0, 128, 72, 9, + 0, 0, 94, 0, 0, 0, + 96, 9, 0, 0, 94, 0, + 0, 128, 96, 9, 0, 0, + 94, 0, 0, 0, 124, 9, + 0, 0, 94, 0, 0, 128, + 124, 9, 0, 0, 94, 0, + 0, 0, 152, 9, 0, 0, + 94, 0, 0, 128, 152, 9, + 0, 0, 94, 0, 0, 0, + 184, 9, 0, 0, 94, 0, + 0, 128, 184, 9, 0, 0, + 94, 0, 0, 0, 220, 9, + 0, 0, 95, 0, 0, 128, + 220, 9, 0, 0, 95, 0, + 0, 0, 248, 9, 0, 0, + 95, 0, 0, 128, 248, 9, + 0, 0, 95, 0, 0, 0, + 20, 10, 0, 0, 95, 0, + 0, 128, 20, 10, 0, 0, + 95, 0, 0, 0, 48, 10, + 0, 0, 95, 0, 0, 128, + 48, 10, 0, 0, 95, 0, + 0, 0, 76, 10, 0, 0, + 95, 0, 0, 128, 76, 10, + 0, 0, 95, 0, 0, 0, + 108, 10, 0, 0, 95, 0, + 0, 128, 108, 10, 0, 0, + 95, 0, 0, 0, 144, 10, + 0, 0, 96, 0, 0, 128, + 144, 10, 0, 0, 96, 0, + 0, 0, 148, 10, 0, 0, + 97, 0, 0, 128, 148, 10, + 0, 0, 97, 0, 0, 0, + 28, 0, 39, 0, 28, 0, + 39, 0, 5, 0, 37, 0, + 18, 0, 36, 0, 5, 0, + 29, 0, 9, 0, 28, 0, + 5, 0, 29, 0, 5, 0, + 29, 0, 9, 0, 41, 0, + 14, 0, 40, 0, 9, 0, + 35, 0, 18, 0, 34, 0, + 9, 0, 35, 0, 18, 0, + 34, 0, 9, 0, 45, 0, + 28, 0, 43, 0, 9, 0, + 45, 0, 28, 0, 43, 0, + 9, 0, 45, 0, 28, 0, + 43, 0, 9, 0, 45, 0, + 22, 0, 44, 0, 9, 0, + 42, 0, 21, 0, 41, 0, + 9, 0, 42, 0, 21, 0, + 41, 0, 9, 0, 42, 0, + 21, 0, 41, 0, 9, 0, + 42, 0, 21, 0, 41, 0, + 9, 0, 42, 0, 21, 0, + 41, 0, 9, 0, 42, 0, + 21, 0, 41, 0, 9, 0, + 42, 0, 21, 0, 41, 0, + 9, 0, 42, 0, 21, 0, + 41, 0, 9, 0, 42, 0, + 21, 0, 41, 0, 9, 0, + 42, 0, 21, 0, 41, 0, + 9, 0, 42, 0, 21, 0, + 41, 0, 9, 0, 42, 0, + 15, 0, 41, 0, 9, 0, + 84, 0, 36, 0, 56, 0, + 9, 0, 84, 0, 35, 0, + 65, 0, 9, 0, 84, 0, + 70, 0, 82, 0, 9, 0, + 84, 0, 35, 0, 83, 0, + 9, 0, 78, 0, 62, 0, + 76, 0, 9, 0, 78, 0, + 62, 0, 76, 0, 9, 0, + 78, 0, 35, 0, 77, 0, + 9, 0, 74, 0, 15, 0, + 73, 0, 9, 0, 74, 0, + 15, 0, 73, 0, 9, 0, + 73, 0, 15, 0, 72, 0, + 9, 0, 73, 0, 15, 0, + 72, 0, 9, 0, 62, 0, + 33, 0, 61, 0, 9, 0, + 62, 0, 33, 0, 61, 0, + 9, 0, 62, 0, 33, 0, + 61, 0, 9, 0, 62, 0, + 33, 0, 61, 0, 9, 0, + 62, 0, 33, 0, 61, 0, + 9, 0, 62, 0, 33, 0, + 61, 0, 9, 0, 62, 0, + 33, 0, 61, 0, 9, 0, + 62, 0, 33, 0, 61, 0, + 9, 0, 62, 0, 33, 0, + 61, 0, 9, 0, 62, 0, + 33, 0, 61, 0, 9, 0, + 62, 0, 33, 0, 61, 0, + 9, 0, 62, 0, 33, 0, + 61, 0, 9, 0, 62, 0, + 33, 0, 61, 0, 9, 0, + 62, 0, 33, 0, 61, 0, + 9, 0, 62, 0, 33, 0, + 61, 0, 9, 0, 62, 0, + 33, 0, 61, 0, 9, 0, + 62, 0, 33, 0, 61, 0, + 9, 0, 62, 0, 16, 0, + 61, 0, 9, 0, 60, 0, + 32, 0, 59, 0, 9, 0, + 60, 0, 32, 0, 59, 0, + 9, 0, 60, 0, 32, 0, + 59, 0, 9, 0, 60, 0, + 32, 0, 59, 0, 9, 0, + 60, 0, 32, 0, 59, 0, + 9, 0, 60, 0, 32, 0, + 59, 0, 9, 0, 60, 0, + 32, 0, 59, 0, 9, 0, + 60, 0, 32, 0, 59, 0, + 9, 0, 60, 0, 32, 0, + 59, 0, 9, 0, 60, 0, + 32, 0, 59, 0, 9, 0, + 60, 0, 32, 0, 59, 0, + 9, 0, 60, 0, 32, 0, + 59, 0, 9, 0, 60, 0, + 32, 0, 59, 0, 9, 0, + 60, 0, 32, 0, 59, 0, + 9, 0, 60, 0, 32, 0, + 59, 0, 9, 0, 60, 0, + 32, 0, 59, 0, 9, 0, + 60, 0, 32, 0, 59, 0, + 9, 0, 60, 0, 16, 0, + 59, 0, 9, 0, 27, 0, + 18, 0, 26, 0, 9, 0, + 40, 0, 26, 0, 39, 0, + 9, 0, 40, 0, 26, 0, + 39, 0, 9, 0, 60, 0, + 38, 0, 59, 0, 9, 0, + 65, 0, 23, 0, 42, 0, + 9, 0, 65, 0, 46, 0, + 53, 0, 9, 0, 65, 0, + 23, 0, 53, 0, 9, 0, + 65, 0, 57, 0, 64, 0, + 9, 0, 65, 0, 23, 0, + 64, 0, 9, 0, 50, 0, + 27, 0, 36, 0, 9, 0, + 50, 0, 39, 0, 48, 0, + 9, 0, 52, 0, 29, 0, + 51, 0, 9, 0, 52, 0, + 29, 0, 51, 0, 9, 0, + 52, 0, 29, 0, 51, 0, + 9, 0, 52, 0, 29, 0, + 51, 0, 9, 0, 52, 0, + 29, 0, 51, 0, 9, 0, + 52, 0, 29, 0, 51, 0, + 9, 0, 52, 0, 15, 0, + 51, 0, 9, 0, 106, 0, + 59, 0, 79, 0, 9, 0, + 106, 0, 83, 0, 103, 0, + 9, 0, 106, 0, 59, 0, + 103, 0, 9, 0, 106, 0, + 59, 0, 103, 0, 9, 0, + 106, 0, 39, 0, 104, 0, + 9, 0, 106, 0, 30, 0, + 105, 0, 9, 0, 106, 0, + 9, 0, 105, 0, 9, 0, + 106, 0, 59, 0, 79, 0, + 9, 0, 106, 0, 83, 0, + 103, 0, 9, 0, 106, 0, + 59, 0, 103, 0, 9, 0, + 106, 0, 39, 0, 104, 0, + 9, 0, 106, 0, 30, 0, + 105, 0, 9, 0, 106, 0, + 9, 0, 105, 0, 5, 0, + 5, 0, 5, 0, 5, 0, + 1, 0, 1, 0, 1, 0, + 1, 0, 246, 0, 0, 0, + 52, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 47, 0, + 0, 0, 1, 16, 0, 0, + 0, 0, 0, 0, 27, 0, + 0, 0, 1, 16, 0, 0, + 0, 0, 0, 0, 27, 0, + 0, 0, 2, 16, 0, 0, + 0, 0, 0, 0, 19, 0, + 0, 0, 48, 0, 0, 0, + 0, 0, 0, 0, 20, 0, + 0, 0, 44, 0, 0, 0, + 68, 0, 0, 0, 100, 0, + 0, 0, 136, 0, 0, 0, + 172, 0, 0, 0, 204, 0, + 0, 0, 236, 0, 0, 0, + 16, 1, 0, 0, 48, 1, + 0, 0, 84, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 11, 202, + 49, 1, 56, 0, 0, 0, + 0, 16, 0, 0, 22, 16, + 0, 0, 64, 1, 0, 0, + 10, 0, 255, 255, 4, 0, + 0, 0, 255, 255, 3, 0, + 0, 0, 0, 0, 88, 0, + 0, 0, 88, 0, 0, 0, + 8, 0, 0, 0, 96, 0, + 0, 0, 0, 0, 0, 0, + 18, 0, 27, 21, 117, 0, + 0, 0, 3, 0, 0, 0, + 12, 0, 117, 105, 110, 116, + 51, 0, 10, 0, 1, 18, + 1, 0, 0, 0, 0, 16, + 0, 0, 10, 0, 24, 21, + 3, 0, 0, 0, 1, 0, + 1, 0, 14, 0, 8, 16, + 2, 16, 0, 0, 23, 0, + 1, 0, 1, 16, 0, 0, + 18, 0, 27, 21, 117, 0, + 0, 0, 2, 0, 0, 0, + 8, 0, 117, 105, 110, 116, + 50, 0, 22, 0, 27, 21, + 64, 0, 0, 0, 2, 0, + 0, 0, 8, 0, 102, 108, + 111, 97, 116, 50, 0, 243, + 242, 241, 10, 0, 24, 21, + 64, 0, 0, 0, 1, 0, + 1, 0, 10, 0, 1, 18, + 1, 0, 0, 0, 117, 0, + 0, 0, 10, 0, 24, 21, + 0, 16, 0, 0, 1, 0, + 1, 0, 14, 0, 8, 16, + 8, 16, 0, 0, 23, 0, + 1, 0, 7, 16, 0, 0, + 10, 0, 24, 21, 5, 16, + 0, 0, 1, 0, 1, 0, + 14, 0, 8, 16, 10, 16, + 0, 0, 23, 0, 1, 0, + 1, 16, 0, 0, 10, 0, + 24, 21, 4, 16, 0, 0, + 1, 0, 1, 0, 14, 0, + 8, 16, 12, 16, 0, 0, + 23, 0, 1, 0, 7, 16, + 0, 0, 14, 0, 23, 21, + 64, 0, 0, 0, 27, 2, + 0, 3, 0, 0, 242, 241, + 10, 0, 24, 21, 14, 16, + 0, 0, 1, 0, 0, 2, + 10, 0, 24, 21, 117, 0, + 0, 0, 1, 0, 1, 0, + 10, 0, 24, 21, 16, 16, + 0, 0, 1, 0, 0, 2, + 18, 0, 27, 21, 117, 0, + 0, 0, 4, 0, 0, 0, + 16, 0, 117, 105, 110, 116, + 52, 0, 10, 0, 24, 21, + 18, 16, 0, 0, 1, 0, + 1, 0, 10, 0, 24, 21, + 19, 16, 0, 0, 1, 0, + 0, 2, 10, 0, 24, 21, + 6, 16, 0, 0, 1, 0, + 0, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 219, 114, 0, 0, 17, 39, + 1, 0, 4, 146, 3, 0, + 0, 16, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 4, 0, 0, 0, 255, 255, + 3, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 18, 0, 27, 21, + 117, 0, 0, 0, 3, 0, + 0, 0, 12, 0, 117, 105, + 110, 116, 51, 0, 10, 0, + 1, 18, 1, 0, 0, 0, + 0, 16, 0, 0, 10, 0, + 24, 21, 3, 0, 0, 0, + 1, 0, 1, 0, 14, 0, + 8, 16, 2, 16, 0, 0, + 23, 0, 1, 0, 1, 16, + 0, 0, 18, 0, 27, 21, + 117, 0, 0, 0, 2, 0, + 0, 0, 8, 0, 117, 105, + 110, 116, 50, 0, 22, 0, + 27, 21, 64, 0, 0, 0, + 2, 0, 0, 0, 8, 0, + 102, 108, 111, 97, 116, 50, + 0, 243, 242, 241, 10, 0, + 24, 21, 64, 0, 0, 0, + 1, 0, 1, 0, 10, 0, + 1, 18, 1, 0, 0, 0, + 117, 0, 0, 0, 10, 0, + 24, 21, 0, 16, 0, 0, + 1, 0, 1, 0, 14, 0, + 8, 16, 8, 16, 0, 0, + 23, 0, 1, 0, 7, 16, + 0, 0, 10, 0, 24, 21, + 5, 16, 0, 0, 1, 0, + 1, 0, 14, 0, 8, 16, + 10, 16, 0, 0, 23, 0, + 1, 0, 1, 16, 0, 0, + 10, 0, 24, 21, 4, 16, + 0, 0, 1, 0, 1, 0, + 14, 0, 8, 16, 12, 16, + 0, 0, 23, 0, 1, 0, + 7, 16, 0, 0, 14, 0, + 23, 21, 64, 0, 0, 0, + 27, 2, 0, 3, 0, 0, + 242, 241, 10, 0, 24, 21, + 14, 16, 0, 0, 1, 0, + 0, 2, 10, 0, 24, 21, + 117, 0, 0, 0, 1, 0, + 1, 0, 10, 0, 24, 21, + 16, 16, 0, 0, 1, 0, + 0, 2, 18, 0, 27, 21, + 117, 0, 0, 0, 4, 0, + 0, 0, 16, 0, 117, 105, + 110, 116, 52, 0, 10, 0, + 24, 21, 18, 16, 0, 0, + 1, 0, 1, 0, 10, 0, + 24, 21, 19, 16, 0, 0, + 1, 0, 0, 2, 10, 0, + 24, 21, 6, 16, 0, 0, + 1, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 68, 51, 68, 83, + 72, 68, 82, 0, 152, 10, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 96, + 12, 0, 0, 0, 8, 0, + 0, 0, 20, 0, 0, 0, + 0, 0, 0, 0, 26, 0, + 1, 22, 0, 0, 0, 0, + 9, 16, 0, 0, 68, 101, + 99, 111, 109, 112, 111, 115, + 101, 73, 110, 100, 101, 120, + 0, 241, 26, 0, 1, 22, + 0, 0, 0, 0, 11, 16, + 0, 0, 82, 101, 97, 100, + 83, 111, 117, 114, 99, 101, + 86, 97, 108, 117, 101, 0, + 30, 0, 1, 22, 0, 0, + 0, 0, 13, 16, 0, 0, + 67, 111, 109, 112, 117, 116, + 101, 68, 101, 115, 116, 73, + 110, 100, 101, 120, 0, 243, + 242, 241, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, + 255, 255, 26, 9, 47, 241, + 96, 0, 0, 0, 52, 2, + 0, 0, 137, 0, 0, 0, + 1, 0, 0, 0, 237, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 101, 0, 0, 0, + 1, 0, 0, 0, 85, 1, + 0, 0, 1, 0, 0, 0, + 49, 1, 0, 0, 1, 0, + 0, 0, 21, 0, 0, 0, + 1, 0, 0, 0, 205, 0, + 0, 0, 1, 0, 0, 0, + 69, 0, 0, 0, 1, 0, + 0, 0, 45, 0, 0, 0, + 1, 0, 0, 0, 17, 1, + 0, 0, 1, 0, 0, 0, + 173, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 128, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 24, 0, + 0, 0, 36, 0, 0, 0, + 48, 0, 0, 0, 60, 0, + 0, 0, 72, 0, 0, 0, + 84, 0, 0, 0, 96, 0, + 0, 0, 108, 0, 0, 0, + 120, 0, 0, 0, 132, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 37, 17, + 0, 0, 0, 0, 124, 0, + 0, 0, 1, 0, 68, 70, + 84, 0, 0, 0, 22, 0, + 81, 17, 15, 16, 0, 0, + 30, 0, 255, 255, 255, 255, + 255, 255, 255, 255, 0, 0, + 115, 114, 99, 0, 22, 0, + 81, 17, 15, 16, 0, 0, + 30, 0, 255, 255, 255, 255, + 255, 255, 255, 255, 1, 0, + 100, 115, 116, 0, 30, 0, + 81, 17, 17, 16, 0, 0, + 8, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 255, 255, + 83, 116, 97, 114, 116, 73, + 110, 100, 101, 120, 0, 0, + 34, 0, 81, 17, 17, 16, + 0, 0, 8, 0, 0, 0, + 4, 0, 255, 255, 255, 255, + 255, 255, 69, 108, 101, 109, + 101, 110, 116, 67, 111, 117, + 110, 116, 0, 0, 0, 0, + 34, 0, 81, 17, 17, 16, + 0, 0, 8, 0, 0, 0, + 8, 0, 255, 255, 255, 255, + 255, 255, 68, 70, 84, 73, + 116, 101, 114, 97, 116, 105, + 111, 110, 0, 0, 0, 0, + 30, 0, 81, 17, 17, 16, + 0, 0, 8, 0, 0, 0, + 12, 0, 255, 255, 255, 255, + 255, 255, 73, 115, 73, 110, + 118, 101, 114, 115, 101, 0, + 0, 0, 30, 0, 81, 17, + 20, 16, 0, 0, 8, 0, + 0, 0, 16, 0, 255, 255, + 255, 255, 255, 255, 73, 110, + 112, 117, 116, 83, 105, 122, + 101, 115, 0, 0, 34, 0, + 81, 17, 20, 16, 0, 0, + 8, 0, 0, 0, 32, 0, + 255, 255, 255, 255, 255, 255, + 73, 110, 112, 117, 116, 83, + 116, 114, 105, 100, 101, 115, + 0, 0, 0, 0, 30, 0, + 81, 17, 20, 16, 0, 0, + 8, 0, 0, 0, 48, 0, + 255, 255, 255, 255, 255, 255, + 79, 117, 116, 112, 117, 116, + 83, 105, 122, 101, 115, 0, + 34, 0, 81, 17, 20, 16, + 0, 0, 8, 0, 0, 0, + 64, 0, 255, 255, 255, 255, + 255, 255, 79, 117, 116, 112, + 117, 116, 83, 116, 114, 105, + 100, 101, 115, 0, 0, 0, + 26, 0, 81, 17, 21, 16, + 0, 0, 8, 0, 0, 0, + 80, 0, 255, 255, 255, 255, + 255, 255, 83, 99, 97, 108, + 101, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 26, 9, 47, 241, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 119, 9, + 49, 1, 1, 0, 0, 0, + 13, 0, 20, 142, 14, 0, + 20, 107, 15, 0, 1, 0, + 76, 0, 0, 0, 32, 0, + 0, 0, 44, 0, 0, 0, + 104, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 0, 0, 25, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 152, 10, + 0, 0, 32, 0, 0, 96, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 2, 0, 9, 0, 12, 16, + 0, 0, 0, 0, 0, 0, + 36, 10, 0, 0, 1, 0, + 0, 0, 168, 107, 67, 3, + 0, 0, 0, 0, 0, 0, + 0, 0, 68, 70, 84, 0, + 110, 111, 110, 101, 0, 0, + 0, 0, 45, 186, 46, 241, + 1, 0, 0, 0, 0, 0, + 0, 0, 152, 10, 0, 0, + 32, 0, 0, 96, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 2, 0, 7, 0, 0, 0, + 0, 0, 1, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 152, 10, 0, 0, 8, 2, + 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 255, 255, 255, 255, + 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 69, 58, 92, 119, 111, 114, + 107, 92, 87, 105, 110, 100, + 111, 119, 115, 45, 77, 97, + 99, 104, 105, 110, 101, 45, + 76, 101, 97, 114, 110, 105, + 110, 103, 92, 83, 97, 109, + 112, 108, 101, 115, 92, 67, + 117, 115, 116, 111, 109, 79, + 112, 101, 114, 97, 116, 111, + 114, 92, 100, 101, 115, 107, + 116, 111, 112, 92, 99, 112, + 112, 92, 111, 112, 101, 114, + 97, 116, 111, 114, 115, 92, + 115, 116, 111, 99, 107, 104, + 97, 109, 46, 104, 108, 115, + 108, 0, 254, 239, 254, 239, + 1, 0, 0, 0, 1, 0, + 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 12, 0, 255, 255, 255, + 255, 255, 255, 255, 255, 255, + 255, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 97, 116, 32, 83, + 99, 97, 108, 101, 59, 13, + 10, 125, 59, 13, 10, 13, + 10, 47, 47, 32, 82, 101, + 116, 117, 114, 110, 115, 32, + 116, 104, 101, 32, 105, 110, + 100, 105, 99, 101, 115, 32, + 102, 111, 114, 32, 116, 104, + 101, 32, 114, 101, 97, 108, + 32, 97, 110, 100, 32, 99, + 111, 109, 112, 108, 101, 120, + 32, 111, 117, 116, 112, 117, + 116, 32, 117, 97, 118, 13, + 10, 117, 105, 110, 116, 50, + 32, 67, 111, 109, 112, 117, + 116, 101, 68, 101, 115, 116, + 73, 110, 100, 101, 120, 40, + 117, 105, 110, 116, 32, 105, + 110, 100, 101, 120, 41, 13, + 10, 123, 13, 10, 32, 32, + 32, 32, 117, 105, 110, 116, + 50, 32, 100, 102, 116, 79, + 117, 116, 112, 117, 116, 73, + 110, 100, 101, 120, 32, 61, + 32, 117, 105, 110, 116, 50, + 40, 105, 110, 100, 101, 120, + 32, 42, 32, 79, 117, 116, + 112, 117, 116, 83, 116, 114, + 105, 100, 101, 115, 91, 50, + 93, 44, 32, 48, 41, 59, + 13, 10, 32, 32, 32, 32, + 100, 102, 116, 79, 117, 116, + 112, 117, 116, 73, 110, 100, + 101, 120, 46, 121, 32, 61, + 32, 100, 102, 116, 79, 117, + 116, 112, 117, 116, 73, 110, + 100, 101, 120, 46, 120, 32, + 43, 32, 79, 117, 116, 112, + 117, 116, 83, 116, 114, 105, + 100, 101, 115, 91, 51, 93, + 59, 13, 10, 32, 32, 32, + 32, 114, 101, 116, 117, 114, + 110, 32, 100, 102, 116, 79, + 117, 116, 112, 117, 116, 73, + 110, 100, 101, 120, 59, 13, + 10, 125, 13, 10, 13, 10, + 47, 47, 32, 84, 104, 101, + 32, 114, 101, 116, 117, 114, + 110, 101, 100, 32, 118, 97, + 108, 117, 101, 32, 105, 115, + 32, 102, 108, 111, 97, 116, + 50, 44, 32, 99, 111, 114, + 114, 101, 115, 112, 111, 110, + 100, 105, 110, 103, 32, 116, + 111, 32, 116, 104, 101, 32, + 99, 111, 109, 112, 108, 101, + 120, 32, 110, 117, 109, 98, + 101, 114, 32, 97, 116, 32, + 116, 104, 101, 32, 105, 110, + 100, 101, 120, 13, 10, 102, + 108, 111, 97, 116, 50, 32, + 82, 101, 97, 100, 83, 111, + 117, 114, 99, 101, 86, 97, + 108, 117, 101, 40, 117, 105, + 110, 116, 51, 32, 105, 110, + 100, 101, 120, 41, 13, 10, + 123, 13, 10, 32, 32, 32, + 32, 102, 108, 111, 97, 116, + 50, 32, 118, 97, 108, 117, + 101, 32, 61, 32, 102, 108, + 111, 97, 116, 50, 40, 48, + 44, 32, 48, 41, 59, 13, + 10, 13, 10, 32, 32, 32, + 32, 117, 105, 110, 116, 32, + 105, 110, 100, 101, 120, 82, + 101, 97, 108, 32, 61, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 105, 110, 100, + 101, 120, 46, 120, 32, 42, + 32, 73, 110, 112, 117, 116, + 83, 116, 114, 105, 100, 101, + 115, 91, 48, 93, 32, 43, + 13, 10, 32, 32, 32, 32, + 32, 32, 32, 32, 105, 110, + 100, 101, 120, 46, 121, 32, + 42, 32, 73, 110, 112, 117, + 116, 83, 116, 114, 105, 100, + 101, 115, 91, 49, 93, 32, + 43, 13, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 105, + 110, 100, 101, 120, 46, 122, + 32, 42, 32, 73, 110, 112, + 117, 116, 83, 116, 114, 105, + 100, 101, 115, 91, 50, 93, + 59, 13, 10, 32, 32, 32, + 32, 118, 97, 108, 117, 101, + 46, 120, 32, 61, 32, 115, + 114, 99, 91, 105, 110, 100, + 101, 120, 82, 101, 97, 108, + 93, 59, 13, 10, 13, 10, + 32, 32, 32, 32, 47, 47, + 32, 73, 102, 32, 114, 101, + 97, 108, 32, 118, 97, 108, + 117, 101, 100, 44, 32, 118, + 97, 108, 117, 101, 46, 121, + 32, 105, 115, 32, 100, 101, + 102, 97, 117, 108, 116, 101, + 100, 32, 116, 111, 32, 48, + 13, 10, 32, 32, 32, 32, + 47, 47, 32, 73, 102, 32, + 99, 111, 109, 112, 108, 101, + 120, 32, 118, 97, 108, 117, + 101, 100, 32, 105, 110, 112, + 117, 116, 44, 32, 97, 115, + 115, 105, 103, 110, 32, 116, + 104, 101, 32, 99, 111, 109, + 112, 108, 101, 120, 32, 112, + 97, 114, 116, 32, 116, 111, + 32, 110, 111, 110, 45, 122, + 101, 114, 111, 46, 46, 46, + 13, 10, 32, 32, 32, 32, + 105, 102, 32, 40, 73, 110, + 112, 117, 116, 83, 105, 122, + 101, 115, 91, 51, 93, 32, + 61, 61, 32, 50, 41, 32, + 123, 13, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 117, + 105, 110, 116, 32, 105, 110, + 100, 101, 120, 73, 109, 97, + 103, 105, 110, 97, 114, 121, + 32, 61, 32, 105, 110, 100, + 101, 120, 82, 101, 97, 108, + 32, 43, 32, 73, 110, 112, + 117, 116, 83, 116, 114, 105, + 100, 101, 115, 91, 51, 93, + 59, 13, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 118, + 97, 108, 117, 101, 46, 121, + 32, 61, 32, 115, 114, 99, + 91, 105, 110, 100, 101, 120, + 73, 109, 97, 103, 105, 110, + 97, 114, 121, 93, 59, 13, + 10, 32, 32, 32, 32, 125, + 13, 10, 13, 10, 32, 32, + 32, 32, 114, 101, 116, 117, + 114, 110, 32, 118, 97, 108, + 117, 101, 59, 13, 10, 125, + 13, 10, 13, 10, 117, 105, + 110, 116, 51, 32, 68, 101, + 99, 111, 109, 112, 111, 115, + 101, 73, 110, 100, 101, 120, + 40, 117, 105, 110, 116, 32, + 105, 110, 100, 101, 120, 41, + 13, 10, 123, 13, 10, 32, + 32, 32, 32, 117, 105, 110, + 116, 32, 116, 101, 109, 112, + 32, 61, 32, 105, 110, 100, + 101, 120, 32, 37, 32, 40, + 79, 117, 116, 112, 117, 116, + 83, 105, 122, 101, 115, 91, + 49, 93, 32, 42, 32, 79, + 117, 116, 112, 117, 116, 83, + 105, 122, 101, 115, 91, 50, + 93, 41, 59, 13, 10, 13, + 10, 32, 32, 32, 32, 117, + 105, 110, 116, 51, 32, 105, + 100, 120, 32, 61, 32, 117, + 105, 110, 116, 51, 40, 48, + 44, 32, 48, 44, 32, 48, + 41, 59, 13, 10, 32, 32, + 32, 32, 105, 100, 120, 46, + 120, 32, 61, 32, 105, 110, + 100, 101, 120, 32, 47, 32, + 40, 79, 117, 116, 112, 117, + 116, 83, 105, 122, 101, 115, + 91, 49, 93, 32, 42, 32, + 79, 117, 116, 112, 117, 116, + 83, 105, 122, 101, 115, 91, + 50, 93, 41, 59, 13, 10, + 32, 32, 32, 32, 105, 100, + 120, 46, 121, 32, 61, 32, + 116, 101, 109, 112, 32, 47, + 32, 79, 117, 116, 112, 117, + 116, 83, 105, 122, 101, 115, + 91, 50, 93, 59, 32, 47, + 47, 32, 84, 104, 105, 115, + 32, 99, 111, 114, 114, 101, + 115, 112, 111, 110, 100, 115, + 32, 116, 111, 32, 116, 104, + 101, 32, 115, 49, 39, 116, + 104, 32, 101, 108, 101, 109, + 101, 110, 116, 32, 111, 102, + 32, 116, 104, 101, 32, 100, + 102, 116, 32, 13, 10, 32, + 32, 32, 32, 105, 100, 120, + 46, 122, 32, 61, 32, 116, + 101, 109, 112, 32, 37, 32, + 79, 117, 116, 112, 117, 116, + 83, 105, 122, 101, 115, 91, + 50, 93, 59, 13, 10, 32, + 32, 32, 32, 114, 101, 116, + 117, 114, 110, 32, 105, 100, + 120, 59, 13, 10, 125, 13, + 10, 13, 10, 91, 110, 117, + 109, 116, 104, 114, 101, 97, + 100, 115, 40, 54, 52, 44, + 32, 49, 44, 32, 49, 41, + 93, 13, 10, 118, 111, 105, + 100, 32, 68, 70, 84, 40, + 117, 105, 110, 116, 51, 32, + 100, 116, 105, 100, 32, 58, + 32, 83, 86, 95, 68, 105, + 115, 112, 97, 116, 99, 104, + 84, 104, 114, 101, 97, 100, + 73, 100, 41, 13, 10, 123, + 13, 10, 32, 32, 32, 32, + 117, 105, 110, 116, 32, 105, + 110, 100, 101, 120, 32, 61, + 32, 83, 116, 97, 114, 116, + 73, 110, 100, 101, 120, 32, + 43, 32, 100, 116, 105, 100, + 46, 120, 59, 13, 10, 32, + 32, 32, 32, 105, 102, 32, + 40, 105, 110, 100, 101, 120, + 32, 60, 32, 69, 108, 101, + 109, 101, 110, 116, 67, 111, + 117, 110, 116, 41, 13, 10, + 32, 32, 32, 32, 123, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 117, 105, 110, + 116, 32, 105, 110, 112, 117, + 116, 76, 101, 110, 103, 116, + 104, 32, 61, 32, 73, 110, + 112, 117, 116, 83, 105, 122, + 101, 115, 91, 49, 93, 59, + 13, 10, 32, 32, 32, 32, + 32, 32, 32, 32, 117, 105, + 110, 116, 32, 104, 97, 108, + 102, 73, 110, 112, 117, 116, + 76, 101, 110, 103, 116, 104, + 32, 61, 32, 105, 110, 112, + 117, 116, 76, 101, 110, 103, + 116, 104, 32, 47, 32, 50, + 59, 13, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 117, + 105, 110, 116, 32, 78, 32, + 61, 32, 49, 32, 60, 60, + 32, 68, 70, 84, 73, 116, + 101, 114, 97, 116, 105, 111, + 110, 59, 13, 10, 32, 32, + 32, 32, 32, 32, 32, 32, + 117, 105, 110, 116, 32, 104, + 97, 108, 102, 78, 32, 61, + 32, 49, 32, 60, 60, 32, + 40, 68, 70, 84, 73, 116, + 101, 114, 97, 116, 105, 111, + 110, 32, 45, 32, 49, 41, + 59, 13, 10, 13, 10, 32, + 32, 32, 32, 32, 32, 32, + 32, 47, 47, 32, 71, 101, + 116, 32, 105, 110, 112, 117, + 116, 32, 101, 118, 101, 110, + 32, 97, 110, 100, 32, 111, + 100, 100, 32, 105, 110, 100, + 105, 99, 101, 115, 13, 10, + 32, 32, 32, 32, 32, 32, + 32, 32, 47, 47, 32, 68, + 101, 99, 111, 109, 112, 111, + 115, 101, 32, 116, 104, 101, + 32, 99, 117, 114, 114, 101, + 110, 116, 32, 105, 110, 100, + 101, 120, 32, 105, 110, 116, + 111, 32, 105, 116, 115, 32, + 108, 111, 99, 97, 116, 105, + 111, 110, 32, 105, 110, 32, + 116, 104, 101, 32, 112, 97, + 99, 107, 101, 100, 32, 116, + 101, 110, 115, 111, 114, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 117, 105, 110, + 116, 50, 32, 105, 110, 112, + 117, 116, 69, 118, 101, 110, + 79, 100, 100, 73, 110, 100, + 101, 120, 80, 97, 105, 114, + 32, 61, 32, 117, 105, 110, + 116, 50, 40, 48, 44, 32, + 48, 41, 59, 13, 10, 32, + 32, 32, 32, 32, 32, 32, + 32, 117, 105, 110, 116, 51, + 32, 105, 100, 120, 32, 61, + 32, 68, 101, 99, 111, 109, + 112, 111, 115, 101, 73, 110, + 100, 101, 120, 40, 105, 110, + 100, 101, 120, 41, 59, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 105, 110, 112, + 117, 116, 69, 118, 101, 110, + 79, 100, 100, 73, 110, 100, + 101, 120, 80, 97, 105, 114, + 46, 120, 32, 61, 32, 40, + 105, 100, 120, 46, 121, 32, + 62, 62, 32, 68, 70, 84, + 73, 116, 101, 114, 97, 116, + 105, 111, 110, 41, 32, 42, + 32, 104, 97, 108, 102, 78, + 32, 43, 32, 40, 105, 100, + 120, 46, 121, 32, 37, 32, + 104, 97, 108, 102, 78, 41, + 59, 13, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 105, + 110, 112, 117, 116, 69, 118, + 101, 110, 79, 100, 100, 73, + 110, 100, 101, 120, 80, 97, + 105, 114, 46, 121, 32, 61, + 32, 105, 110, 112, 117, 116, + 69, 118, 101, 110, 79, 100, + 100, 73, 110, 100, 101, 120, + 80, 97, 105, 114, 46, 120, + 32, 43, 32, 40, 105, 110, + 112, 117, 116, 76, 101, 110, + 103, 116, 104, 32, 47, 32, + 50, 41, 59, 13, 10, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 47, 47, 32, + 67, 114, 101, 97, 116, 101, + 32, 102, 117, 108, 108, 32, + 105, 110, 100, 101, 120, 32, + 102, 111, 114, 32, 101, 118, + 101, 110, 32, 97, 110, 100, + 32, 111, 100, 100, 32, 118, + 97, 108, 117, 101, 115, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 117, 105, 110, + 116, 51, 32, 105, 110, 112, + 117, 116, 69, 118, 101, 110, + 73, 100, 120, 32, 61, 32, + 117, 105, 110, 116, 51, 40, + 105, 100, 120, 46, 120, 44, + 32, 105, 110, 112, 117, 116, + 69, 118, 101, 110, 79, 100, + 100, 73, 110, 100, 101, 120, + 80, 97, 105, 114, 46, 120, + 44, 32, 105, 100, 120, 46, + 122, 41, 59, 13, 10, 32, + 32, 32, 32, 32, 32, 32, + 32, 117, 105, 110, 116, 51, + 32, 105, 110, 112, 117, 116, + 79, 100, 100, 73, 100, 120, + 32, 61, 32, 117, 105, 110, + 116, 51, 40, 105, 100, 120, + 46, 120, 44, 32, 105, 110, + 112, 117, 116, 69, 118, 101, + 110, 79, 100, 100, 73, 110, + 100, 101, 120, 80, 97, 105, + 114, 46, 121, 44, 32, 105, + 100, 120, 46, 122, 41, 59, + 13, 10, 13, 10, 32, 32, + 32, 32, 32, 32, 32, 32, + 47, 47, 32, 82, 101, 97, + 100, 32, 105, 110, 112, 117, + 116, 32, 101, 118, 101, 110, + 32, 97, 110, 100, 32, 111, + 100, 100, 32, 118, 97, 108, + 117, 101, 115, 13, 10, 32, + 32, 32, 32, 32, 32, 32, + 32, 102, 108, 111, 97, 116, + 50, 32, 105, 110, 112, 117, + 116, 69, 118, 101, 110, 86, + 97, 108, 117, 101, 32, 61, + 32, 82, 101, 97, 100, 83, + 111, 117, 114, 99, 101, 86, + 97, 108, 117, 101, 40, 105, + 110, 112, 117, 116, 69, 118, + 101, 110, 73, 100, 120, 41, + 59, 13, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 102, + 108, 111, 97, 116, 50, 32, + 105, 110, 112, 117, 116, 79, + 100, 100, 86, 97, 108, 117, + 101, 32, 61, 32, 82, 101, + 97, 100, 83, 111, 117, 114, + 99, 101, 86, 97, 108, 117, + 101, 40, 105, 110, 112, 117, + 116, 79, 100, 100, 73, 100, + 120, 41, 59, 13, 10, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 47, 47, 32, + 67, 114, 101, 97, 116, 101, + 32, 99, 111, 101, 102, 102, + 105, 99, 105, 101, 110, 116, + 13, 10, 32, 32, 32, 32, + 32, 32, 32, 32, 47, 47, + 32, 119, 40, 107, 44, 32, + 78, 41, 32, 61, 32, 101, + 94, 40, 105, 42, 50, 42, + 112, 105, 32, 42, 32, 107, + 32, 47, 32, 78, 41, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 117, 105, 110, + 116, 32, 107, 32, 61, 32, + 105, 100, 120, 46, 121, 32, + 37, 32, 78, 59, 13, 10, + 32, 32, 32, 32, 32, 32, + 32, 32, 115, 116, 97, 116, + 105, 99, 32, 99, 111, 110, + 115, 116, 32, 102, 108, 111, + 97, 116, 32, 80, 73, 32, + 61, 32, 51, 46, 49, 52, + 49, 53, 57, 50, 54, 53, + 102, 59, 13, 10, 32, 32, + 32, 32, 32, 32, 32, 32, + 115, 116, 97, 116, 105, 99, + 32, 99, 111, 110, 115, 116, + 32, 102, 108, 111, 97, 116, + 32, 84, 65, 85, 32, 61, + 32, 80, 73, 32, 42, 32, + 50, 59, 13, 10, 32, 32, + 32, 32, 32, 32, 32, 32, + 98, 111, 111, 108, 32, 105, + 115, 73, 110, 118, 101, 114, + 115, 101, 32, 61, 32, 73, + 115, 73, 110, 118, 101, 114, + 115, 101, 32, 61, 61, 32, + 49, 59, 13, 10, 32, 32, + 32, 32, 32, 32, 32, 32, + 99, 111, 110, 115, 116, 32, + 102, 108, 111, 97, 116, 32, + 105, 110, 118, 101, 114, 115, + 101, 95, 115, 119, 105, 116, + 99, 104, 32, 61, 32, 105, + 115, 73, 110, 118, 101, 114, + 115, 101, 32, 63, 32, 49, + 46, 102, 32, 58, 32, 45, + 49, 46, 102, 59, 13, 10, + 32, 32, 32, 32, 32, 32, + 32, 32, 102, 108, 111, 97, + 116, 32, 116, 104, 101, 116, + 97, 32, 61, 32, 105, 110, + 118, 101, 114, 115, 101, 95, + 115, 119, 105, 116, 99, 104, + 32, 42, 32, 84, 65, 85, + 32, 42, 32, 40, 102, 108, + 111, 97, 116, 41, 107, 32, + 47, 32, 40, 102, 108, 111, + 97, 116, 41, 78, 59, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 102, 108, 111, + 97, 116, 50, 32, 119, 32, + 61, 32, 102, 108, 111, 97, + 116, 50, 40, 99, 111, 115, + 40, 116, 104, 101, 116, 97, + 41, 44, 32, 115, 105, 110, + 40, 116, 104, 101, 116, 97, + 41, 41, 59, 13, 10, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 117, 105, 110, + 116, 50, 32, 111, 117, 116, + 112, 117, 116, 73, 110, 100, + 101, 120, 32, 61, 32, 67, + 111, 109, 112, 117, 116, 101, + 68, 101, 115, 116, 73, 110, + 100, 101, 120, 40, 105, 110, + 100, 101, 120, 41, 59, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 100, 115, 116, + 91, 111, 117, 116, 112, 117, + 116, 73, 110, 100, 101, 120, + 46, 120, 93, 32, 61, 32, + 83, 99, 97, 108, 101, 32, + 42, 32, 40, 105, 110, 112, + 117, 116, 69, 118, 101, 110, + 86, 97, 108, 117, 101, 46, + 120, 32, 43, 32, 40, 119, + 46, 120, 32, 42, 32, 105, + 110, 112, 117, 116, 79, 100, + 100, 86, 97, 108, 117, 101, + 46, 120, 32, 45, 32, 119, + 46, 121, 32, 42, 32, 105, + 110, 112, 117, 116, 79, 100, + 100, 86, 97, 108, 117, 101, + 46, 121, 41, 41, 59, 13, + 10, 32, 32, 32, 32, 32, + 32, 32, 32, 100, 115, 116, + 91, 111, 117, 116, 112, 117, + 116, 73, 110, 100, 101, 120, + 46, 121, 93, 32, 61, 32, + 83, 99, 97, 108, 101, 32, + 42, 32, 40, 105, 110, 112, + 117, 116, 69, 118, 101, 110, + 86, 97, 108, 117, 101, 46, + 121, 32, 43, 32, 40, 119, + 46, 120, 32, 42, 32, 105, + 110, 112, 117, 116, 79, 100, + 100, 86, 97, 108, 117, 101, + 46, 121, 32, 43, 32, 119, + 46, 121, 32, 42, 32, 105, + 110, 112, 117, 116, 79, 100, + 100, 86, 97, 108, 117, 101, + 46, 120, 41, 41, 59, 13, + 10, 32, 32, 32, 32, 125, + 13, 10, 125, 0, 7, 0, + 0, 0, 186, 0, 0, 0, + 93, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 94, 0, 0, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 148, 46, 49, 1, + 131, 64, 0, 99, 1, 0, + 0, 0, 72, 76, 216, 215, + 247, 141, 69, 75, 145, 40, + 228, 68, 206, 46, 102, 122, + 137, 0, 0, 0, 47, 76, + 105, 110, 107, 73, 110, 102, + 111, 0, 47, 110, 97, 109, + 101, 115, 0, 47, 115, 114, + 99, 47, 104, 101, 97, 100, + 101, 114, 98, 108, 111, 99, + 107, 0, 47, 115, 114, 99, + 47, 102, 105, 108, 101, 115, + 47, 101, 58, 92, 119, 111, + 114, 107, 92, 119, 105, 110, + 100, 111, 119, 115, 45, 109, + 97, 99, 104, 105, 110, 101, + 45, 108, 101, 97, 114, 110, + 105, 110, 103, 92, 115, 97, + 109, 112, 108, 101, 115, 92, + 99, 117, 115, 116, 111, 109, + 111, 112, 101, 114, 97, 116, + 111, 114, 92, 100, 101, 115, + 107, 116, 111, 112, 92, 99, + 112, 112, 92, 111, 112, 101, + 114, 97, 116, 111, 114, 115, + 92, 115, 116, 111, 99, 107, + 104, 97, 109, 46, 104, 108, + 115, 108, 0, 4, 0, 0, + 0, 6, 0, 0, 0, 1, + 0, 0, 0, 58, 0, 0, + 0, 0, 0, 0, 0, 17, + 0, 0, 0, 7, 0, 0, + 0, 10, 0, 0, 0, 6, + 0, 0, 0, 0, 0, 0, + 0, 5, 0, 0, 0, 34, + 0, 0, 0, 8, 0, 0, + 0, 0, 0, 0, 0, 220, + 81, 51, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 32, 0, 0, 0, + 229, 0, 0, 0, 120, 1, + 0, 0, 111, 1, 0, 0, + 144, 0, 0, 0, 0, 0, + 0, 0, 222, 13, 0, 0, + 128, 0, 0, 0, 243, 12, + 0, 0, 100, 26, 0, 0, + 96, 0, 0, 0, 20, 0, + 0, 0, 40, 0, 0, 0, + 164, 2, 0, 0, 44, 0, + 0, 0, 112, 1, 0, 0, + 3, 0, 0, 0, 45, 0, + 0, 0, 31, 0, 0, 0, + 38, 0, 0, 0, 6, 0, + 0, 0, 15, 0, 0, 0, + 39, 0, 0, 0, 40, 0, + 0, 0, 41, 0, 0, 0, + 42, 0, 0, 0, 43, 0, + 0, 0, 44, 0, 0, 0, + 16, 0, 0, 0, 8, 0, + 0, 0, 9, 0, 0, 0, + 10, 0, 0, 0, 11, 0, + 0, 0, 12, 0, 0, 0, + 13, 0, 0, 0, 14, 0, + 0, 0, 17, 0, 0, 0, + 18, 0, 0, 0, 19, 0, + 0, 0, 20, 0, 0, 0, + 21, 0, 0, 0, 22, 0, + 0, 0, 23, 0, 0, 0, + 24, 0, 0, 0, 25, 0, + 0, 0, 26, 0, 0, 0, + 27, 0, 0, 0, 28, 0, + 0, 0, 29, 0, 0, 0, + 30, 0, 0, 0, 7, 0, + 0, 0, 32, 0, 0, 0, + 33, 0, 0, 0, 34, 0, + 0, 0, 35, 0, 0, 0, + 37, 0, 0, 0, 36, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 46, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0 +}; diff --git a/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/OperatorRegistration.cpp b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/OperatorRegistration.cpp index 930afee02ea8..977b5c22076d 100644 --- a/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/OperatorRegistration.cpp +++ b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/OperatorRegistration.cpp @@ -2,6 +2,7 @@ // Licensed under the MIT License. #include "precomp.h" +#include "DmlDFT.h" #include "OperatorRegistration.h" #include "core/providers/dml/OperatorAuthorHelper/MLOperatorAuthorHelper.h" #include "core/providers/dml/OperatorAuthorHelper/OperatorVersions.h" @@ -333,12 +334,12 @@ constexpr static std::array supportedTypeListQLinea SupportedTensorDataTypes::Int8|SupportedTensorDataTypes::UInt8, SupportedTensorDataTypes::Int8|SupportedTensorDataTypes::UInt8, SupportedTensorDataTypes::Int8|SupportedTensorDataTypes::UInt8, - SupportedTensorDataTypes::Int32 + SupportedTensorDataTypes::Int32 }; constexpr static std::array supportedTypeListDynamicQuantizeLinear = { - SupportedTensorDataTypes::Float32, + SupportedTensorDataTypes::Float32, SupportedTensorDataTypes::UInt8, }; @@ -351,28 +352,28 @@ constexpr auto requiredConstantCpuInputs(Args... args) // Define a single row of OperatorRegistrationInformation. #define REG_INFO(version, operatorName, ...) \ - #operatorName, OnnxOperatorSet##version::sc_sinceVer_##operatorName, onnxruntime::kOnnxDomain, Create##operatorName, ShapeInferenceFunction, false, ##__VA_ARGS__, + #operatorName, OnnxOperatorSet##version::sc_sinceVer_##operatorName, onnxruntime::kOnnxDomain, Create##operatorName, ShapeInferenceFunction, false, ##__VA_ARGS__, // Versioned operator #define REG_INFO_VER(version, operatorName, ...) \ - #operatorName, OnnxOperatorSet##version::sc_sinceVer_##operatorName, onnxruntime::kOnnxDomain, Create##operatorName##version, ShapeInferenceFunction, false, ##__VA_ARGS__, + #operatorName, OnnxOperatorSet##version::sc_sinceVer_##operatorName, onnxruntime::kOnnxDomain, Create##operatorName##version, ShapeInferenceFunction, false, ##__VA_ARGS__, // Identity operators use Copy, alias their first input, and use elementwise identity operators // when needed for striding support, but issue actual copies outside the graph. #define REG_INFO_COPY(version, operatorName, ...) \ - #operatorName, OnnxOperatorSet##version::sc_sinceVer_##operatorName, onnxruntime::kOnnxDomain, CreateCopy, ShapeInferenceFunction, true, ##__VA_ARGS__, + #operatorName, OnnxOperatorSet##version::sc_sinceVer_##operatorName, onnxruntime::kOnnxDomain, CreateCopy, ShapeInferenceFunction, true, ##__VA_ARGS__, // MS-domain operators #define REG_INFO_MS(version, operatorName, ...) \ - #operatorName, MsftOperatorSet##version::sc_sinceVer_##operatorName, onnxruntime::kMSDomain, Create##operatorName, ShapeInferenceFunction, false, ##__VA_ARGS__, + #operatorName, MsftOperatorSet##version::sc_sinceVer_##operatorName, onnxruntime::kMSDomain, Create##operatorName, ShapeInferenceFunction, false, ##__VA_ARGS__, // MS-domain operators #define REG_INFO_MSDML(version, operatorName, ...) \ - #operatorName, MsftOperatorSet##version::sc_sinceVer_##operatorName, onnxruntime::kMSDmlDomain, Create##operatorName, ShapeInferenceFunction, false, ##__VA_ARGS__, + #operatorName, MsftOperatorSet##version::sc_sinceVer_##operatorName, onnxruntime::kMSDmlDomain, Create##operatorName, ShapeInferenceFunction, false, ##__VA_ARGS__, constexpr static OperatorRegistrationInformation operatorRegistrationInformationTable[] = { -/// Domain/Type, Ver, Name, TypeNames, Types, Graph Support, Required const CPU inputs, +/// Domain/Type, Ver, Name, TypeNames, Types, Graph Support, Required const CPU inputs, /// Input count required for graph support, /// Support query function @@ -687,7 +688,7 @@ constexpr static OperatorRegistrationInformation operatorRegistrationInformation {REG_INFO_MSDML(1, FusedMatMul, typeNameListDefault, supportedTypeListFloat16to32, DmlGraphSupport::Supported)}, {REG_INFO_MSDML(1, FusedAdd, typeNameListDefault, supportedTypeListFloat16to32, DmlGraphSupport::Supported)}, {REG_INFO_MSDML(1, FusedSum, typeNameListDefault, supportedTypeListFloat16to32, DmlGraphSupport::Supported, requiredConstantCpuInputs(), 2)}, - + {REG_INFO( 10, IsInf, typeNameListTwo, supportedTypeListIsInf, DmlGraphSupport::Supported)}, {REG_INFO( 10, Mod, typeNameListDefault, supportedTypeListNumericDefault, DmlGraphSupport::Supported)}, {REG_INFO( 13, Mod, typeNameListDefault, supportedTypeListNumericDefault, DmlGraphSupport::Supported)}, @@ -700,7 +701,7 @@ constexpr static OperatorRegistrationInformation operatorRegistrationInformation {REG_INFO( 9, MaxUnpool, typeNameListTwo, supportedTypeListMaxUnpool, DmlGraphSupport::Supported, requiredConstantCpuInputs(2))}, {REG_INFO( 11, MaxUnpool, typeNameListTwo, supportedTypeListMaxUnpool, DmlGraphSupport::Supported, requiredConstantCpuInputs(2))}, // 11 is identical to 9. - + {REG_INFO_MS( 1, QLinearAdd, typeNameListDefault, supportedTypeListInteger8, DmlGraphSupport::Supported)}, {REG_INFO( 10, QLinearConv, typeNameListFour, supportedTypeListQLinearConv, DmlGraphSupport::Supported)}, {REG_INFO( 10, QLinearMatMul, typeNameListThree, supportedTypeListQLinearMatMul, DmlGraphSupport::Supported)}, @@ -708,8 +709,8 @@ constexpr static OperatorRegistrationInformation operatorRegistrationInformation {REG_INFO( 10, ConvInteger, typeNameListThree, supportedTypeListInteger, DmlGraphSupport::Supported)}, {REG_INFO( 11, DynamicQuantizeLinear, typeNameListTwo, supportedTypeListDynamicQuantizeLinear, DmlGraphSupport::Supported)}, }; - -template + +template MLOperatorEdgeDescription EdgeDesc() { return {MLOperatorEdgeType::Tensor, static_cast(MLTypeTraits::TensorType)}; @@ -726,7 +727,7 @@ void RegisterDmlOperators(IMLOperatorRegistry* registry) for (const OperatorRegistrationInformation& information : operatorRegistrationInformationTable) { assert(information.tensorTypeNames.size() == information.supportedTensorDataTypes.size()); - + MLOperatorKernelDescription desc = {}; desc.domain = information.domain; desc.name = information.operatorName; @@ -735,11 +736,11 @@ void RegisterDmlOperators(IMLOperatorRegistry* registry) // The graph must be configured with operators from only the legacy DML API, or only the new DML API bool kernelSupportsGraph = !bool(information.dmlGraphSupport & DmlGraphSupport::NotSupported); - desc.options = information.shapeInferenceFunction ? + desc.options = information.shapeInferenceFunction ? MLOperatorKernelOptions::None : MLOperatorKernelOptions::AllowDynamicInputShapes; desc.minimumOperatorSetVersion = information.sinceVersion; - + typeConstraints.resize(information.tensorTypeNames.size()); desc.typeConstraints = typeConstraints.data(); desc.typeConstraintCount = static_cast(typeConstraints.size()); @@ -750,7 +751,7 @@ void RegisterDmlOperators(IMLOperatorRegistry* registry) FusionHelpers::AssertFusableOperatorSupportsVersionIfExists(desc.name, desc.domain, desc.minimumOperatorSetVersion); #endif - // edgeDescs will accumulate the edge descriptions across all type constraints. + // edgeDescs will accumulate the edge descriptions across all type constraints. // The values of allowedTypeCount will indicate how many elements of edgeDescs // belong to each type constraint. edgeDescs.clear(); @@ -773,7 +774,7 @@ void RegisterDmlOperators(IMLOperatorRegistry* registry) if (bool(supportedTypes & SupportedTensorDataTypes::Int64 )) edgeDescs.push_back(EdgeDesc()); //if (bool(supportedTypes & SupportedTensorDataTypes::String )) edgeDescs.push_back(EdgeDesc()); if (bool(supportedTypes & SupportedTensorDataTypes::Bool )) edgeDescs.push_back(EdgeDesc()); - if (bool(supportedTypes & SupportedTensorDataTypes::Float16)) edgeDescs.push_back(EdgeDesc<::MLFloat16>()); + if (bool(supportedTypes & SupportedTensorDataTypes::Float16)) edgeDescs.push_back(EdgeDesc<::MLFloat16>()); if (bool(supportedTypes & SupportedTensorDataTypes::Float64)) edgeDescs.push_back(EdgeDesc()); if (bool(supportedTypes & SupportedTensorDataTypes::UInt32 )) edgeDescs.push_back(EdgeDesc()); if (bool(supportedTypes & SupportedTensorDataTypes::UInt64 )) edgeDescs.push_back(EdgeDesc()); @@ -781,7 +782,7 @@ void RegisterDmlOperators(IMLOperatorRegistry* registry) typeConstraints[i].allowedTypeCount = static_cast(edgeDescs.size() - lastEdgeDescSize); lastEdgeDescSize = edgeDescs.size(); } - + // Now that the edge descriptions list won't be re-allocated, assign pointers to its memory // into the type constraints entries size_t totalTypeCount = 0; @@ -793,7 +794,7 @@ void RegisterDmlOperators(IMLOperatorRegistry* registry) ComPtr factory = wil::MakeOrThrow(information.creationFunction); ComPtr shapeInferrer; - + if (information.shapeInferenceFunction) { shapeInferrer = wil::MakeOrThrow(information.shapeInferenceFunction); @@ -806,8 +807,8 @@ void RegisterDmlOperators(IMLOperatorRegistry* registry) } ORT_THROW_IF_FAILED(registryPrivate->RegisterOperatorKernel( - &desc, - factory.Get(), + &desc, + factory.Get(), shapeInferrer.Get(), supportQuery.Get(), true, // isInternalOperator @@ -818,6 +819,8 @@ void RegisterDmlOperators(IMLOperatorRegistry* registry) static_cast(information.requiredConstantCpuInputs.second) )); } + + GpuDFTOperatorFactory::RegisterDFTKernel(registry); } } // namespace Dml diff --git a/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/Shaders/stockham.hlsl b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/Shaders/stockham.hlsl new file mode 100644 index 000000000000..4f05dbaf2680 --- /dev/null +++ b/onnxruntime/core/providers/dml/DmlExecutionProvider/src/Operators/Shaders/stockham.hlsl @@ -0,0 +1,97 @@ +RWStructuredBuffer src : register(u0); +RWStructuredBuffer dst : register(u1); + +cbuffer Constants +{ + uint StartIndex; + uint ElementCount; + uint DFTIteration; + uint IsInverse; + uint4 InputSizes; + uint4 InputStrides; + uint4 OutputSizes; + uint4 OutputStrides; + float Scale; +}; + +// Returns the indices for the real and complex output uav +uint2 ComputeDestIndex(uint index) +{ + uint2 dftOutputIndex = uint2(index * OutputStrides[2], 0); + dftOutputIndex.y = dftOutputIndex.x + OutputStrides[3]; + return dftOutputIndex; +} + +// The returned value is float2, corresponding to the complex number at the index +float2 ReadSourceValue(uint3 index) +{ + float2 value = float2(0, 0); + + uint indexReal = + index.x * InputStrides[0] + + index.y * InputStrides[1] + + index.z * InputStrides[2]; + value.x = src[indexReal]; + + // If real valued, value.y is defaulted to 0 + // If complex valued input, assign the complex part to non-zero... + if (InputSizes[3] == 2) { + uint indexImaginary = indexReal + InputStrides[3]; + value.y = src[indexImaginary]; + } + + return value; +} + +uint3 DecomposeIndex(uint index) +{ + uint temp = index % (OutputSizes[1] * OutputSizes[2]); + + uint3 idx = uint3(0, 0, 0); + idx.x = index / (OutputSizes[1] * OutputSizes[2]); + idx.y = temp / OutputSizes[2]; // This corresponds to the s1'th element of the dft + idx.z = temp % OutputSizes[2]; + return idx; +} + +[numthreads(64, 1, 1)] +void DFT(uint3 dtid : SV_DispatchThreadId) +{ + uint index = StartIndex + dtid.x; + if (index < ElementCount) + { + uint inputLength = InputSizes[1]; + uint halfInputLength = inputLength / 2; + uint N = 1 << DFTIteration; + uint halfN = 1 << (DFTIteration - 1); + + // Get input even and odd indices + // Decompose the current index into its location in the packed tensor + uint2 inputEvenOddIndexPair = uint2(0, 0); + uint3 idx = DecomposeIndex(index); + inputEvenOddIndexPair.x = (idx.y >> DFTIteration) * halfN + (idx.y % halfN); + inputEvenOddIndexPair.y = inputEvenOddIndexPair.x + halfInputLength; + + // Create full index for even and odd values + uint3 inputEvenIdx = uint3(idx.x, inputEvenOddIndexPair.x, idx.z); + uint3 inputOddIdx = uint3(idx.x, inputEvenOddIndexPair.y, idx.z); + + // Read input even and odd values + float2 inputEvenValue = ReadSourceValue(inputEvenIdx); + float2 inputOddValue = ReadSourceValue(inputOddIdx); + + // Create coefficient + // w(k, N) = e^(i*2*pi * k / N) + uint k = idx.y % N; + static const float PI = 3.14159265f; + static const float TAU = PI * 2; + bool isInverse = IsInverse == 1; + const float inverseMultiplier = isInverse ? 1.f : -1.f; + float theta = inverseMultiplier * TAU * (float)k / (float)N; + float2 w = float2(cos(theta), sin(theta)); + + uint2 outputIndex = ComputeDestIndex(index); + dst[outputIndex.x] = Scale * (inputEvenValue.x + (w.x * inputOddValue.x - w.y * inputOddValue.y)); + dst[outputIndex.y] = Scale * (inputEvenValue.y + (w.x * inputOddValue.y + w.y * inputOddValue.x)); + } +} diff --git a/onnxruntime/test/testdata/onnx_backend_test_series_filters.jsonc b/onnxruntime/test/testdata/onnx_backend_test_series_filters.jsonc index 9b0a66b7ece9..6fd4e5ab552f 100644 --- a/onnxruntime/test/testdata/onnx_backend_test_series_filters.jsonc +++ b/onnxruntime/test/testdata/onnx_backend_test_series_filters.jsonc @@ -302,7 +302,10 @@ "^test_resize_downsample_sizes_linear_pytorch_half_pixel_cpu", "^test_resize_downsample_sizes_nearest_cpu", "^test_resize_upsample_sizes_nearest_cpu", - "^test_roialign_cpu" + "^test_roialign_cpu", + "^test_dft_axis_cpu", + "^test_dft_cpu", + "^test_dft_inverse_cpu" ], // ORT first supported opset 7, so models with nodes that require versions prior to opset 7 are not supported "tests_with_pre_opset7_dependencies": [