// SPDX-License-Identifier: MITpragmasolidity ^0.8.0;contract Switch {boolpublic switchOn; // switch is offbytes4public offSelector =bytes4(keccak256("turnSwitchOff()"));modifieronlyThis() {require(msg.sender ==address(this),"Only the contract can call this"); _; }modifieronlyOff() {// we use a complex data type to put in memorybytes32[1] memory selector;// check that the calldata at position 68 (location of _data)assembly {calldatacopy(selector,68,4) // grab function selector from calldata }require(selector[0] == offSelector,"Can only call the turnOffSwitch function"); _; }functionflipSwitch(bytesmemory_data) publiconlyOff { (bool success,) =address(this).call(_data);require(success,"call failed :("); }functionturnSwitchOn() publiconlyThis { switchOn =true; }functionturnSwitchOff() publiconlyThis { switchOn =false; }}