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