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