MEDIUM severity: The `setFlagger` function in the `LibShortRecord` library allows a new flagger to reuse the `flagger. The `setFlagger` function in the `LibShortRecord` library allows a new flagger to reuse the `flaggerHint` flag ID after `LibAsset.firstLiquidationTime` has passed, even if the original flagger has already updated their flag ID. This vulnerability enables a new flagger to take control of the liquidat...

Vulnerable code:
```\nfunction setFlagger(\n    STypes.ShortRecord storage short,\n    address cusd,\n    uint16 flaggerHint\n) internal {\n    if (flagStorage.g_flaggerId == 0) {\n        address flaggerToReplace = s.flagMapping[flaggerHint];\n\n        if (flaggerToReplace!= address(0)) {\n            uint256 timeDiff = LibOrders.getOffsetTimeHours()\n                - s.assetUser[cusd][flaggerToReplace].g_updatedAt;\n            if (timeDiff > LibAsset.firstLiquidationTime(cusd)) {\n                delete s.assetUser[cusd][flaggerToReplace].g_flaggerId;\n                short.flaggerId = flagStorage.g_flaggerId = flaggerHint;\n            }\n        }\n        s.flagMapping[short.flaggerId] = msg.sender;\n    }\n```\n```\ndiff --git a/test/MarginCallFlagShort.t.sol b/test/MarginCallFlagShort.t.sol\nindex 906657e..3d7f985 100644\n--- a/test/MarginCallFlagShort.t.sol\n+++ b/test/MarginCallFlagShort.t.sol\n@@ -169,6 @@ contract MarginCallFlagShortTest is MarginCallHelper {\n     assertEq(diamond.getFlagger(shortRecord.flaggerId), extra);\n\n    function test_FlaggerId_Override_Before_Call() public {\n        address flagger1 = address(77);\n        address flagger2 = address(78);\n        vm.label(flagger1, "flagger1");\n        vm.label(flagger2, "flagger2");\n\n        // Create first short\n        fundLimitBidOpt(DEFAULT_PRICE, DEFAULT_AMOUNT, receiver);\n        fundLimitShortOpt(DEFAULT_PRICE, DEFAULT_AMOUNT, sender);\n        STypes.ShortRecord memory shortRecord1 = diamond.getShortRecord(asset, sender, Constants.SHORT_STARTING_ID);\n        assertEq(diamond.getFlaggerIdCounter(), 1);\n        assertEq(shortRecord1.flaggerId, 0);\n        assertEq(diamond.getFlagger(shortRecord1.flaggerId), address(0));\n\n        // Flag first short\n        setETH(2500 ether);\n        vm.prank(flagger1);\n        diamond.flagShort(asset, sender, shortRecord1.id, Constants.HEAD);\n        shortRecord1 = diamond.getShortRecord(asset, sender, shortRecord1.id);\n        assertEq(diamond.getFlaggerIdCounter(), 2);\n        assertEq(shortRecord1.flaggerId, 1);\n        assertEq(diamond.getFlagger(shortRecord1.flaggerId), flagger1);\n\n        skip(TEN_HRS_PLUS);\n        setETH(2500 ether);\n\n        // Attempting direct liquidation by flagger2 fails since only allowed to flagger1\n        // Add ask order to liquidate against\n        fundLimitAskOpt(DEFAULT_PRICE, DEFAULT_AMOUNT, receiver);\n        uint16[] memory shortHintArray = setShortHintArray();\n        vm.prank(flagger2);\n        vm.expectRevert(Errors.MarginCallIneligibleWindow.selector);\n        diamond.liquidate(asset, sender, shortRecord1.id, shortHintArray);\n\n        // Cancel the previously created ask order\n        fundLimitBidOpt(DEFAULT_PRICE, DEFAULT_AMOUNT, receiver);\n\n        // Reset\n        setETH(4000 ether);\n\n        // Create another short\n```