PKLUHYE4BGIMJKU6VKGBGSHEB2ZT53OYMTFBYCZYCO4J3RVTRXSAC 6YZAVBWU6E5FYOI5JGEIPXGZLIKAW6LS2AOFIQWEE5DMOPPCD5PQC IQDCHWCP47LL46EXQLQGHQPGFYIHQLMQBHA57RWJCIOX5UEUIQAQC SWWE2R6MVBX5CNM6X3WLXZTSRTU53PBJL7WJSFVF77XBPXDX4COAC WT3GA27PQ2AOAIGK65O3Q4DMX4AZDVNULBLRL6GF4QW6QCASUEAAC UB2ITZJSDADVINSQEZ3HA6PVGA7OA6JYFG5GMSO7Y7LOXJC4FI7AC EC3TVL4X6VZZVLOKUN63LC73ADPHBHMZO7QMDXGX2ZPURVI4B4XQC S2NVIFXRFER4SRA37WCT5XTXHDHAL5WIGGKY4A4XOTPLTKTZSRGQC YBJRDOTCX3ZRDB5EVXJBR55FX3CADCSIGMYWNYVC2PD5W3GXR3DQC KM5PSZ4A2FJOPHJA6RC7LHZAUXLQDZDQC2DVSE5YUORLFIPZO74QC 2VUX5BTDKHX3TJ677NW34H5WLSWH35C3PU46C7MXCN5O7PAZVXNQC A5YBC77VWH2LXCZJOPZORQJI5ZYABSCHJWVX5HVNWPM5RABXESLQC D7A7MSIHJS3IAOLEPK52M4CZLDPLO7JB3Y62XACT2AM6UUCPQ6BAC 4WO3ZJM2RNYZCBPS7FGYAEBELYD57OSS7LEUYCWGZBCAY272SNQQC V55EAIWQXWER2HWKZHPJBV7DDJMSPSPWSO3FSSAYODJHVDBHUN6QC ZVI4AWERNOTDJ3765HJXRBZT57XPNKVONQ6TGOGNPOL2VN42KMJQC BFN2VHZS7VCBUHQ4S3CQ3LFQV2V4M6VANNAF32XMRFQVWRGYSZ6AC 3SYSJKYLVCXR54LRUPL6GOQISSJS6XWK4M6PRQRCKZN7F23NNVEAC 23SFYK4Q5NKBPJG53PQNPWQH6UOUU2YKJEL7RLXYBRLJOJYV7AWQC 6F7Q4ZLR5DGYT557MYMSHMZGQ7EVEB3LZGLZFCWHGIOI66STIANQC ACDXXAX26ZJJFKJDGRC2GOSJY5JHQWCSTP55SYI6D6LH5UIRYUBAC I2AG42PAVOII4V4TWDJV5ZVNDIHKBRDT254BFQLFUIY723TW6CCQC YKHE3XMWOWPGOWYSISF73MIAKN7WB3AHCV2OA4ECAFPF47YHUXEAC KEPKF3WO7ZZ2VB2DRVVTWTGPL7TCA52BMYUPHUNUJH6WO3HAT6JQC KWTBNTO3QUUE2YADF6SYW6G6ZOKYEWRJQKIWDGZXR33S3YNDVIZQC PTWZYQFRWWUOE2WMQT26CKZKFSHAIJVJS3QWHJFYUFDRRTVPHSUAC UR4J677RWA3OFG6HQTD46BUUE5YFPSBEFCJAEM5OMT4V5A7SBNNQC OJPGHVC3RFBQ7TTSCZH6URSSATII3TESD74EISDNOTNXXSX7PQMAC FJSVMFB4FRZV6VXQTQ3FWY3GRHSM5RLYNCZ67JIDN254CVY7QFOQC WAOGSCOJ5A372BZKHEYD2BCDBCENNVLFYW3INKUOOAZMDADDIFIQC EJPSD5XO43DWUBBZGNQMY4TMCAXL5EWCGX3OEHUERQ5GRASGWQLQC YK3MOJJLRYEKZ4FUCNJ3YKMTKOINWIYOJKR3ER7IRSGTC7O6FJZQC 7WCB5YQJJZIPUAFHTCQBWNI6ZM5XMIQJAKTLYTR7NOR5NKESRMDQC AZ5D2LQUSYVWVEP7ISFDSZTMZ65UEHZATILMDQ4TYLCKJH4Q3TIAC WGID4LS4EISIOXB5Y5SOFGEF5PLBJSCPFCETH2CGRTFN3NC4WGJQC }#[derive(Debug)]struct State {repo_fs_watch: Option<Debouncer<RecommendedWatcher, RecommendedCache>>,repo_tx_in: mpsc::UnboundedSender<repo::MsgIn>,/// Cache for untracked and changed files loaded from diskfiles: file::State,model: model::State,}#[derive(Debug, Clone)]enum Msg {View(view::Msg),NoOp,Window(window::Event),LoadedId(Box<Id>),RepoTaskExited,ToRepo(repo::MsgIn),FromRepo(repo::MsgOut),File(file::Msg),
}#[derive(Debug)]struct State {repo_fs_watch: Option<Debouncer<RecommendedWatcher, RecommendedCache>>,repo_tx_in: mpsc::UnboundedSender<repo::MsgIn>,/// Cache for untracked and changed files loaded from diskfiles: file::State,model: model::State,}#[derive(Debug, Clone)]enum Msg {View(view::Msg),NoOp,Window(window::Event),LoadedId(Box<Id>),RepoTaskExited,ToRepo(repo::MsgIn),FromRepo(repo::MsgOut),File(file::Msg),
}fn clipboard_copy(state: &mut State) -> Task<Msg> {if let Some(ReadyState { selection, .. }) = model::is_ready(&state.model) {let to_copy = match selection::unify(selection) {selection::Unified::Status(Some(inflorescence_model::selection::Status::LogChange(selection::LogChange { hash, .. },),)) => Some(repo::hash_to_string(hash)),selection::Unified::Channel(Some(selection::Channel {log: Some(selection::LogChange { hash, .. }),..})) => Some(repo::hash_to_string(hash)),selection::Unified::EntireLog(Some(selection::LogChange {hash,..})) => Some(repo::hash_to_string(hash)),selection::Unified::Status(_)| selection::Unified::Channel(_)| selection::Unified::EntireLog(_) => None,};if let Some(to_copy) = to_copy {task::clipboard_write(to_copy)} else {Task::none()}} else {Task::none()}