“…If this is the case, a time interval is composed that includes the value of the attribute, the start time, and the end time. The start time is set to current timestamp , and the end Function: sendAttributeInterval(String attributeID, Data value, Relation r, Timestamp t) (1) if attributeID ∈ r.attributes then (2) if events.get(attributeID) ̸ = ⌀ then (3) Interval interval = events.get(attributeID) (4) interval.endTime = t (5) send Info(r.ID, attributeID, interval) (6) end (7) Interval interval = (value, t, ⊥) (8) events.get(attributeID).add(interval) (9) end Function: receiveInterval(Interval , NodeID , Relation r) (1) .enqueue( ) (2) if .size=1 then (3) updatedQueue.add( ) (4) end (5) while updatedQueues ̸ = ⌀ do (6) foreach ∈ updatedQueues do…”