Download [#SAK-6192] Hibernate-related exception

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
[SAK-6192] Hibernate-related exception Created: 03-Sep-2006
Status:
Project:
Component/s:
Affects
Version/s:
Fix Version/s:
Closed
Sakai
Gradebook
2.2.x
Type:
Reporter:
Resolution:
Labels:
Remaining
Estimate:
Time Spent:
Original
Estimate:
Environment:
Bug
Stephen Marquard
Fixed
None
Not Specified
Issue Links:
Relate
relates to
Updated: 23-Oct-2008 Resolved: 25-Oct-2006
2.4.0
Priority:
Assignee:
Votes:
Major
Oliver Heyer
0
Not Specified
Not Specified
Linux, mysql
SAK-3785
2 Methods needed in gradebook
Closed
Description
Unknown user behaviour triggered this bug report:
org.sakaiproject.tool.api.ToolException: Exception while invoking expression #
{assignmentDetailsBean.processUpdateScores}
at org.sakaiproject.portal.charon.CharonPortal.forwardTool(CharonPortal.java:1247)
caused by: javax.servlet.ServletException: Exception while invoking expression #{assignmentDetailsBean.proce
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
caused by: javax.faces.el.EvaluationException: Exception while invoking expression #
{assignmentDetailsBean.processUpdateScores}
at javax.faces.component.UICommand.broadcast(UICommand.java:86)
caused by: org.springframework.dao.InvalidDataAccessApiUsageException: The given object has a null identifi
org.sakaiproject.tool.gradebook.AssignmentGradeRecord; nested exception is org.hibernate.TransientObjectExc
org.sakaiproject.tool.gradebook.AssignmentGradeRecord
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccesso
caused by: org.hibernate.TransientObjectException: The given object has a null identifier: org.sakaiproject.tool.g
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.getUpdateId(DefaultSaveOrUpdateEventListener
at org.hibernate.event.def.DefaultUpdateEventListener.getUpdateId(DefaultUpdateEventListener.java:46)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventList
at org.hibernate.event.def.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventLis
at org.hibernate.impl.SessionImpl.fireUpdate(SessionImpl.java:559)
at org.hibernate.impl.SessionImpl.update(SessionImpl.java:547)
at org.hibernate.impl.SessionImpl.update(SessionImpl.java:539)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.orm.hibernate3.HibernateTemplate$CloseSuppressingInvocationHandler.invoke(Hibern
at $Proxy1.update(null:-1)
at org.sakaiproject.tool.gradebook.business.impl.GradebookManagerHibernateImpl$5.doInHibernate(Gradebook
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:334)
at
org.sakaiproject.tool.gradebook.business.impl.GradebookManagerHibernateImpl.updateAssignmentGradeRecor
at sun.reflect.GeneratedMethodAccessor2586.invoke(null:-1)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocati
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy57.updateAssignmentGradeRecords(null:-1)
at org.sakaiproject.tool.gradebook.ui.AssignmentDetailsBean.saveScores(AssignmentDetailsBean.java:212)
at org.sakaiproject.tool.gradebook.ui.AssignmentDetailsBean.processUpdateScores(AssignmentDetailsBean.jav
at sun.reflect.GeneratedMethodAccessor2585.invoke(null:-1)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:129)
at javax.faces.component.UICommand.broadcast(UICommand.java:86)
at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:90)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:164)
at org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:316)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:106)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:501)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.sakaiproject.tool.gradebook.ui.RoleFilter.doFilter(RoleFilter.java:139)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.sakaiproject.jsf.util.JsfTool.dispatch(JsfTool.java:221)
at org.sakaiproject.jsf.util.JsfTool.doPost(JsfTool.java:256)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:359)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:339)
at org.sakaiproject.portal.charon.CharonPortal.forwardTool(CharonPortal.java:1247)
at org.sakaiproject.portal.charon.CharonPortal.doTool(CharonPortal.java:1199)
at org.sakaiproject.portal.charon.CharonPortal.doPost(CharonPortal.java:867)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:532)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:754)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:684)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:876)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
Comments
Comment by Stephen Marquard [ 16-Sep-2006 ]
Another case, looks identical to the one above:
org.sakaiproject.tool.api.ToolException: Exception while invoking expression #
{assignmentDetailsBean.processUpdateScores}
at org.sakaiproject.portal.charon.CharonPortal.forwardTool(CharonPortal.java:1247)
caused by: javax.servlet.ServletException: Exception while invoking expression #{assignmentDetailsBean.proce
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
caused by: javax.faces.el.EvaluationException: Exception while invoking expression #
{assignmentDetailsBean.processUpdateScores}
at javax.faces.component.UICommand.broadcast(UICommand.java:86)
caused by: org.springframework.dao.InvalidDataAccessApiUsageException: The given object has a null identifi
org.sakaiproject.tool.gradebook.AssignmentGradeRecord; nested exception is org.hibernate.TransientObjectExc
org.sakaiproject.tool.gradebook.AssignmentGradeRecord
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccesso
caused by: org.hibernate.TransientObjectException: The given object has a null identifier: org.sakaiproject.tool.g
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.getUpdateId(DefaultSaveOrUpdateEventListener
at org.hibernate.event.def.DefaultUpdateEventListener.getUpdateId(DefaultUpdateEventListener.java:46)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventList
at org.hibernate.event.def.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventLis
at org.hibernate.impl.SessionImpl.fireUpdate(SessionImpl.java:559)
at org.hibernate.impl.SessionImpl.update(SessionImpl.java:547)
at org.hibernate.impl.SessionImpl.update(SessionImpl.java:539)
at sun.reflect.GeneratedMethodAccessor3603.invoke(null:-1)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.orm.hibernate3.HibernateTemplate$CloseSuppressingInvocationHandler.invoke(Hibern
at $Proxy1.update(null:-1)
at org.sakaiproject.tool.gradebook.business.impl.GradebookManagerHibernateImpl$5.doInHibernate(Gradebook
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:334)
at
org.sakaiproject.tool.gradebook.business.impl.GradebookManagerHibernateImpl.updateAssignmentGradeRecor
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocati
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy57.updateAssignmentGradeRecords(null:-1)
at org.sakaiproject.tool.gradebook.ui.AssignmentDetailsBean.saveScores(AssignmentDetailsBean.java:212)
at org.sakaiproject.tool.gradebook.ui.AssignmentDetailsBean.processUpdateScores(AssignmentDetailsBean.jav
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:129)
at javax.faces.component.UICommand.broadcast(UICommand.java:86)
at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:90)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:164)
at org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:316)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:106)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:501)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.sakaiproject.tool.gradebook.ui.RoleFilter.doFilter(RoleFilter.java:139)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.sakaiproject.jsf.util.JsfTool.dispatch(JsfTool.java:221)
at org.sakaiproject.jsf.util.JsfTool.doPost(JsfTool.java:256)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:359)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:339)
at org.sakaiproject.portal.charon.CharonPortal.forwardTool(CharonPortal.java:1247)
at org.sakaiproject.portal.charon.CharonPortal.doTool(CharonPortal.java:1199)
at org.sakaiproject.portal.charon.CharonPortal.doPost(CharonPortal.java:867)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:532)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:754)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:684)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:876)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
Comment by Owen McGrath [ 16-Sep-2006 ]
Stephen, do you happen to know anything more about the site involved? In particular, any assignments coming f
Comment by Stephen Marquard [ 17-Sep-2006 ]
This user is in two sites, one as a student, the other as a Tutor (TA). In both sites, the Gradebook only has interna
or Assignments.
Comment by Owen McGrath [ 19-Sep-2006 ]
At first blush, Mary Glackin's report on Sakai Dev this morning looks quite similar. I've assigned this to Louis.
Comment by Louis Majanja [ 19-Sep-2006 ]
hey Stephen, is this something that is happening regularly ? or did this happen once and you were unable to repli
Comment by Stephen Marquard [ 19-Sep-2006 ]
It's happened twice (that I noticed). We didn't get user comments or a specific complaint about it, so we're not su
specifically to see if it can be replicated or not (not knowing what to try).
Comment by Louis Majanja [ 19-Sep-2006 ]
So is the use experiencing the problem in both sites - as a student and also separately as a TA. . I s this the same
happening to other users too?
Comment by Owen McGrath [ 19-Sep-2006 ]
Need to understand if these have any relation to each other.
Comment by Owen McGrath [ 19-Sep-2006 ]
Note: need to understand whether these are related.
Comment by Stephen Marquard [ 19-Sep-2006 ]
My guess is that the user is experiencing it in the site in which he/she is a TA. I don't know if the two reports are
we have the original around anymore.
Comment by Ray Davis [ 25-Oct-2006 ]
To be more exact about the version of the Gradebook that's involved here, the line numbers in the error log matc
files checked in as revisions 14109 and 9716.
Comment by Ray Davis [ 25-Oct-2006 ]
Although without further information we can't be sure that this is the cause of the problem, after looking at the c
the folllowing scenario:
1) Start with an unscored student. Two graders open the gradebook for the site and go to the Assignment Details
2) Grader 1 gives the previously unscored student a score and saves changes.
3) Without refreshing the screen, Grader 2 gives the same student a score and tries to save changes.
Stephen, if your logging is set at the INFO level, could you see if there are two matching "INFO AssignmentDet
in front of the stack trace? That would be partial confirmation that this is the problem.
The bug I see in the code, by the way, is that we decide whether this is a new data object or not based on reading
logic, but then the actual update is done with the object passed in from the UI. Bad logic, since we don't know ho
If the UI did its own query before any record existed, then we'll be trying to update the database using a object th
optimistic locking failure because there's no conflict between the object versions: one of the objects doesn't have
Comment by Stephen Marquard [ 25-Oct-2006 ]
Sorry, I don't think we have those logs any more. We don't generally keep our tomcat logs around for that long.
Comment by Ray Davis [ 25-Oct-2006 ]
I was also able to trigger a similar problem when two instructors both tried to give a course grade to a previously
I added code to the assignment scoring and course grading methods to throw the usual optimistic locking failure
Fix checked in as revision 17431.
Comment by Megan May [ 08-Feb-2007 ]
Updating fix version from nightly2/trunk to 2.4.0.001 in prep for first QA tag (Prelim testing pre-code freeze)
Comment by Filter Maintainer [ 10-Sep-2007 ]
[Bulk Edit] This issue is Resolved for 2.4.0, however, there were not sufficient resources available for it to be Q
reopened we are assuming it was completely addressed, and are Closing it. Please feel free to reopen this issue if
this specific issue's fix, otherwise, please open a new issue.
Generated at Sun May 14 23:01:47 CDT 2017 using JIRA 7.0.10#70120sha1:37e3d7a6fc4d580639533e7f7c232c925e554a6a.
Related documents