<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36" version="26.2.14">
  <diagram name="Page-1" id="pMAFXSwGTbxxo7wkyZoP">
    <mxGraphModel dx="978" dy="881" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="-JcRy6otO31GiCju6Gh6-18" value="" style="group" vertex="1" connectable="0" parent="1">
          <mxGeometry x="260" y="30" width="330" height="110" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-1" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;&lt;font style=&quot;font-size: 13px;&quot;&gt;Teacher Browser&amp;nbsp;&lt;span style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;(SvelteKit Frontend App)&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;LocalStorage (Assessment History)&lt;/li&gt;&lt;li&gt;HTTP Client (API Calls)&lt;/li&gt;&lt;li&gt;WebSocket Client (Real-time updates)&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=10;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-18">
          <mxGeometry width="330" height="110" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-5" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://a.storyblok.com/f/88751/1702x2049/619c584101/svelte_logo.png;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-18">
          <mxGeometry x="280" y="14" width="33.24" height="40" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-6" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://static-00.iconduck.com/assets.00/typescript-icon-icon-2048x2048-2rhh1z66.png;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-18">
          <mxGeometry x="281.62" y="64" width="30" height="30" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-19" value="" style="group" vertex="1" connectable="0" parent="1">
          <mxGeometry x="60" y="250" width="330" height="110" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-7" value="&lt;p class=&quot;p1&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;b&gt;SvelteKit API Layer&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 13px;&quot;&gt;&lt;b&gt;(Serverless on Netlify)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;/api/grade&amp;nbsp;&lt;/li&gt;&lt;li&gt;/api/hitl-review&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=10;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-19">
          <mxGeometry width="330" height="110" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-8" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://a.storyblok.com/f/88751/1702x2049/619c584101/svelte_logo.png;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-19">
          <mxGeometry x="280" y="14" width="33.24" height="40" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-9" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://static-00.iconduck.com/assets.00/typescript-icon-icon-2048x2048-2rhh1z66.png;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-19">
          <mxGeometry x="281.62" y="64" width="30" height="30" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-20" value="" style="group" vertex="1" connectable="0" parent="1">
          <mxGeometry x="460" y="250" width="330" height="110" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-10" value="&lt;p class=&quot;p1&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;b&gt;PartyKit Server&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 13px;&quot;&gt;&lt;b&gt;(WebSocket Real-time)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=10;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-20">
          <mxGeometry width="330" height="110" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-11" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://www.partykit.io/assets/PK_Logo_Full.png;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-20">
          <mxGeometry x="262" y="12.259999999999991" width="62.15" height="41.74" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-12" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://static-00.iconduck.com/assets.00/websocket-icon-512x384-sm7dfowk.png;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-20">
          <mxGeometry x="272" y="66" width="42.15" height="31.61" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-21" value="" style="group;fillColor=default;" vertex="1" connectable="0" parent="1">
          <mxGeometry x="60" y="460" width="460" height="230" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-17" value="&lt;p class=&quot;p1&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;b&gt;Azure AI Services&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Azure OpenAI (Grading &amp;amp; Feedback)&amp;nbsp;&lt;/li&gt;&lt;li&gt;Azure AI Agent Service (Orchestration)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=10;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-21">
          <mxGeometry y="10" width="330" height="150" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-13" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;editableCssRules=.*;image=data:image/svg+xml,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAuMDAyNzk0MjY1NzQ3MDcwMzEyNSAtMi4zODQxODU3OTEwMTU2MjVlLTcgMTcuOTk3MjI4NjIyNDM2NTIzIDEzLjk4OTM3MTI5OTc0MzY1MiIgaGVpZ2h0PSIxMy45ODkzNzEyOTk3NDM2NTIiIHdpZHRoPSIxNy45OTcyMjg2MjI0MzY1MjMiIGlkPSJhYjcxMGJhNy1kYzhjLTQ0Y2UtYTY4ZS1hZjY1ZGQ2YjQ2NWEiPjxkZWZzPjxyYWRpYWxHcmFkaWVudCBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjUwMywgMC44NjUsIC0xLjIxOCwgMC43MDgsIDcuMjI0LCAtMS4zNCkiIHI9IjkuNzE4IiBjeT0iNC42NTciIGN4PSIzLjEyMyIgaWQ9ImIyMTBmZWYxLWVlN2EtNDIxMi04YWQ1LTg4OWE2NWZmOTMxZCI+PHN0b3Agc3RvcC1jb2xvcj0iIzljZWJmZiIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzUwZTZmZiIgb2Zmc2V0PSIwLjY2NyIvPjxzdG9wIHN0b3AtY29sb3I9IiMzMmJlZGQiIG9mZnNldD0iMSIvPjwvcmFkaWFsR3JhZGllbnQ+PHJhZGlhbEdyYWRpZW50IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIxOC40MDciIGN5PSI0LjEwNCIgY3g9IjEuODgyIiBpZD0iZTEwMmE5N2ItZTczOC00OTc5LTg2YmUtODE4MDQ1Yjg3OWZjIj48c3RvcCBzdG9wLWNvbG9yPSIjZTdmOWZmIiBvZmZzZXQ9IjAiLz48c3RvcCBzdG9wLWNvbG9yPSIjYzNmMWZmIiBvZmZzZXQ9IjAuMjc3Ii8+PHN0b3Agc3RvcC1jb2xvcj0iI2MxZjFmZiIgb2Zmc2V0PSIwLjQwOCIvPjxzdG9wIHN0b3AtY29sb3I9IiM5Y2ViZmYiIG9mZnNldD0iMSIvPjwvcmFkaWFsR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB5Mj0iMTcuMzYxIiB4Mj0iMy43NyIgeTE9IjQuNjAyIiB4MT0iMTUuMTUiIGlkPSJhYzNlOWYwNS1mOWZhLTQ2YmYtOTJjYS02NzFmOTI5MDAyN2YiPjxzdG9wIHN0b3AtY29sb3I9IiMwMDc4ZDQiIG9mZnNldD0iMCIvPjxzdG9wIHN0b3AtY29sb3I9IiMwMDViYTEiIG9mZnNldD0iMC43MTIiLz48c3RvcCBzdG9wLWNvbG9yPSIjMDAzMDY3IiBvZmZzZXQ9IjEiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48Zz48cGF0aCBmaWxsPSJ1cmwoI2IyMTBmZWYxLWVlN2EtNDIxMi04YWQ1LTg4OWE2NWZmOTMxZCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTIuMDA1KSIgZD0iTTUuNzg1LDEzLjA3OXMtMS42Ni0uNTcuMjUzLTIuMDU5YTEyLjAxNywxMi4wMTcsMCwwLDEsNS43ODktMS45OTRsMS43NjUtMy40NTRhMTcuMSwxNy4xLDAsMCwwLTcuNjA3LjY0NkMyLjA5MSw3LjU3My0xLjgsMTEuODE4LjksMTQuMDI4QTQuMzkxLDQuMzkxLDAsMCwwLDUuNzg1LDEzLjA3OVoiLz48cGF0aCBmaWxsPSJ1cmwoI2UxMDJhOTdiLWU3MzgtNDk3OS04NmJlLTgxODA0NWI4NzlmYykiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTIuMDA1KSIgZD0iTTguNCw5Ljc5VjcuMzg0YS40NzUuNDc1LDAsMCwxLC40NzUtLjQ3NWguMzE2YS44NjIuODYyLDAsMSwwLDAtLjM3Mkg4Ljg3YS44NDguODQ4LDAsMCwwLS44NDcuODQ3VjguODkzaC0uNmEuODYyLjg2MiwwLDEsMCwwLC4zNzJoLjZ2LjY2MUM4LjE0NSw5Ljg3OSw4LjI2OSw5LjgzNCw4LjQsOS43OVptMS42MzItMy41NThhLjQ5MS40OTEsMCwxLDEtLjQ5LjQ5MUEuNDkxLjQ5MSwwLDAsMSwxMC4wMjcsNi4yMzJaTTYuNTgyLDkuNTY5YS40OTEuNDkxLDAsMSwxLC40OTEtLjQ5QS40OTEuNDkxLDAsMCwxLDYuNTgyLDkuNTY5WiIvPjxwYXRoIGZpbGw9InVybCgjZTEwMmE5N2ItZTczOC00OTc5LTg2YmUtODE4MDQ1Yjg3OWZjKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtMi4wMDUpIiBkPSJNMy4zMjQsMTAuMkguNjk0Yy0uMDguMTI0LS4xNTIuMjQ4LS4yMTkuMzcySDMuMzI0YS44NDguODQ4LDAsMCwwLC44NDctLjg0N1Y5LjUxOGEuODYzLjg2MywwLDEsMC0uMzcyLDB2LjIwNkEuNDc1LjQ3NSwwLDAsMSwzLjMyNCwxMC4yWm0uMTctMS41MjJhLjQ5MS40OTEsMCwxLDEsLjQ5MS40OTFBLjQ5Mi40OTIsMCwwLDEsMy40OTQsOC42NzdaIi8+PHBhdGggZmlsbD0idXJsKCNlMTAyYTk3Yi1lNzM4LTQ5NzktODZiZS04MTgwNDViODc5ZmMpIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0yLjAwNSkiIGQ9Ik01LjExOSwxMi4yNjFINC4zMDdhLjg2My44NjMsMCwxLDAsMCwuMzcyaC45QS42NDIuNjQyLDAsMCwxLDUuMTE5LDEyLjI2MVptLTEuNjU0LjY3N2EuNDkxLjQ5MSwwLDEsMSwuNDkxLS40OTFBLjQ5MS40OTEsMCwwLDEsMy40NjUsMTIuOTM4WiIvPjxwYXRoIGZpbGw9InVybCgjYWMzZTlmMDUtZjlmYS00NmJmLTkyY2EtNjcxZjkyOTAwMjdmKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtMi4wMDUpIiBkPSJNLjksMTQuMDI4YzYuMjY3LDMuODEsMTIuMzQ3LDIuNTY0LDE2Ljk5MS04LjAxNkExLjMxNSwxLjMxNSwwLDAsMCwxOCw1LjQ4VjIuMzM2YS4zMzEuMzMxLDAsMCwwLS4zMy0uMzMxSDE0LjY1N2EuNzA4LjcwOCwwLDAsMC0uNjIxLjQzNUMxMC45MDYsMTEuMjgzLDMuMzg4LDE1LjEyNy45LDE0LjAyOFoiLz48L2c+PC9zdmc+;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-21">
          <mxGeometry x="279.5" y="70" width="38" height="29.56" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-14" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;editableCssRules=.*;image=data:image/svg+xml,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOCAxOCIgaGVpZ2h0PSIxOCIgd2lkdGg9IjE4IiBpZD0idXVpZC1hZGJkYWU4ZS01YTQxLTQ2ZDEtOGMxOC1hYTczY2RiZmVlMzIiPjxkZWZzPjxyYWRpYWxHcmFkaWVudCBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtMTc5MzkuMDMgMjAzNjguMDI5KSByb3RhdGUoNDUpIHNjYWxlKDI1LjA5MSAtMzQuMTQ5KSIgcj0iLjQ1IiBjeT0iNzkzLjE5OSIgY3g9Ii02Ny45ODEiIGlkPSJ1dWlkLTJhNzQwN2FhLWI3ODctNDhkZC1hOTZhLTBkODFhYjZlOTNiYiI+PHN0b3Agc3RvcC1jb2xvcj0iIzgzYjlmOSIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzAwNzhkNCIgb2Zmc2V0PSIxIi8+PC9yYWRpYWxHcmFkaWVudD48L2RlZnM+PHBhdGggc3Ryb2tlLXdpZHRoPSIwIiBmaWxsPSJ1cmwoI3V1aWQtMmE3NDA3YWEtYjc4Ny00OGRkLWE5NmEtMGQ4MWFiNmU5M2JiKSIgZD0ibTAsMi43djEyLjZjMCwxLjQ5MSwxLjIwOSwyLjcsMi43LDIuN2gxMi42YzEuNDkxLDAsMi43LTEuMjA5LDIuNy0yLjdWMi43YzAtMS40OTEtMS4yMDktMi43LTIuNy0yLjdIMi43QzEuMjA5LDAsMCwxLjIwOSwwLDIuN1pNMTAuOCwwdjMuNmMwLDMuOTc2LDMuMjI0LDcuMiw3LjIsNy4yaC0zLjZjLTMuOTc2LDAtNy4xOTksMy4yMjItNy4yLDcuMTk4di0zLjU5OGMwLTMuOTc2LTMuMjI0LTcuMi03LjItNy4yaDMuNmMzLjk3NiwwLDcuMi0zLjIyNCw3LjItNy4yWiIvPjwvc3ZnPg==;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-21">
          <mxGeometry x="280" y="20" width="38" height="38" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-15" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;editableCssRules=.*;image=data:image/svg+xml,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAuNjQzODUxMzk5NDIxNjkxOSAtOS41MzY3NDMxNjQwNjI1ZS03IDE2LjcxMjE1MDU3MzczMDQ3IDE4IiBoZWlnaHQ9IjE4IiB3aWR0aD0iMTYuNzEyMTUwNTczNzMwNDciIGlkPSJ1dWlkLTZiODM4MGMzLTBlZTUtNGM0NC05MmEyLWYxODVjODJkYjZiYSI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDYxNy4xMjYgLTIwNS43NTgpIHNjYWxlKDEgLTEpIiB5Mj0iLTIwNi4yMiIgeDI9Ii02MDYuNiIgeTE9Ii0yMTguMzc4IiB4MT0iLTYwMy41NjMiIGlkPSJ1dWlkLTA1ODc2YzcyLThmMjYtNDBkYS05OTZlLWE0ODgxNzJlYzA3MiI+PHN0b3Agc3RvcC1jb2xvcj0iIzcxMjU3NSIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzlhMjg4NCIgb2Zmc2V0PSIuMDkiLz48c3RvcCBzdG9wLWNvbG9yPSIjYmYyYzkyIiBvZmZzZXQ9Ii4xOCIvPjxzdG9wIHN0b3AtY29sb3I9IiNkYTJlOWMiIG9mZnNldD0iLjI3Ii8+PHN0b3Agc3RvcC1jb2xvcj0iI2ViMzBhMiIgb2Zmc2V0PSIuMzQiLz48c3RvcCBzdG9wLWNvbG9yPSIjZjEzMWE1IiBvZmZzZXQ9Ii40Ii8+PHN0b3Agc3RvcC1jb2xvcj0iI2VjMzBhMyIgb2Zmc2V0PSIuNSIvPjxzdG9wIHN0b3AtY29sb3I9IiNkZjJmOWUiIG9mZnNldD0iLjYxIi8+PHN0b3Agc3RvcC1jb2xvcj0iI2M5MmQ5NiIgb2Zmc2V0PSIuNzIiLz48c3RvcCBzdG9wLWNvbG9yPSIjYWEyYThhIiBvZmZzZXQ9Ii44MyIvPjxzdG9wIHN0b3AtY29sb3I9IiM4MzI2N2MiIG9mZnNldD0iLjk1Ii8+PHN0b3Agc3RvcC1jb2xvcj0iIzcxMjU3NSIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjE3LjEyNiAtMjA1Ljc1OCkgc2NhbGUoMSAtMSkiIHkyPSItMjIzLjE3NSIgeDI9Ii02MDIuNDEyIiB5MT0iLTIwNi4wMjUiIHgxPSItNjAyLjQxMiIgaWQ9InV1aWQtYzRhMmY2MjctZDczMC00NDdlLTkxNTItNjIwMDljNjRjMzYxIj48c3RvcCBzdG9wLWNvbG9yPSIjZGE3ZWQwIiBvZmZzZXQ9IjAiLz48c3RvcCBzdG9wLWNvbG9yPSIjYjE3YmQ1IiBvZmZzZXQ9Ii4wOCIvPjxzdG9wIHN0b3AtY29sb3I9IiM4Nzc4ZGIiIG9mZnNldD0iLjE5Ii8+PHN0b3Agc3RvcC1jb2xvcj0iIzYyNzZlMSIgb2Zmc2V0PSIuMyIvPjxzdG9wIHN0b3AtY29sb3I9IiM0NTc0ZTUiIG9mZnNldD0iLjQxIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzJlNzJlOCIgb2Zmc2V0PSIuNTQiLz48c3RvcCBzdG9wLWNvbG9yPSIjMWQ3MWViIiBvZmZzZXQ9Ii42NyIvPjxzdG9wIHN0b3AtY29sb3I9IiMxNDcxZWMiIG9mZnNldD0iLjgxIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzExNzFlZCIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjE3LjEyNiAtMjA1Ljc1OCkgc2NhbGUoMSAtMSkiIHkyPSItMjI0LjY0NCIgeDI9Ii02MTQuODA3IiB5MT0iLTIwNi40MTQiIHgxPSItNjAzLjQzOCIgaWQ9InV1aWQtNWE0Y2YyMTUtNDkzMi00ZjEyLThhZjEtMWI2ODMzZGYyNTljIj48c3RvcCBzdG9wLWNvbG9yPSIjZGE3ZWQwIiBvZmZzZXQ9IjAiLz48c3RvcCBzdG9wLWNvbG9yPSIjYjc3YmQ0IiBvZmZzZXQ9Ii4wNSIvPjxzdG9wIHN0b3AtY29sb3I9IiM5MDc5ZGEiIG9mZnNldD0iLjExIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzZlNzdkZiIgb2Zmc2V0PSIuMTgiLz48c3RvcCBzdG9wLWNvbG9yPSIjNTE3NWUzIiBvZmZzZXQ9Ii4yNSIvPjxzdG9wIHN0b3AtY29sb3I9IiMzOTczZTciIG9mZnNldD0iLjMzIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzI3NzJlOSIgb2Zmc2V0PSIuNDIiLz48c3RvcCBzdG9wLWNvbG9yPSIjMWE3MWViIiBvZmZzZXQ9Ii41NCIvPjxzdG9wIHN0b3AtY29sb3I9IiMxMzcxZWMiIG9mZnNldD0iLjY4Ii8+PHN0b3Agc3RvcC1jb2xvcj0iIzExNzFlZCIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHBhdGggc3Ryb2tlLXdpZHRoPSIwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9InVybCgjdXVpZC0wNTg3NmM3Mi04ZjI2LTQwZGEtOTk2ZS1hNDg4MTcyZWMwNzIpIiBkPSJtMTIuMDYxLjAxMmMuNTM0LDAsMS4wMDguNDAxLDEuMTc4Ljk4NHMxLjE2Niw0LjE5LDEuMTY2LDQuMTl2Ny4xNjZoLTMuNjA3bC4wNzMtMTIuMzUyaDEuMTl2LjAxMloiLz48cGF0aCBzdHJva2Utd2lkdGg9IjAiIGZpbGw9InVybCgjdXVpZC1jNGEyZjYyNy1kNzMwLTQ0N2UtOTE1Mi02MjAwOWM2NGMzNjEpIiBkPSJtMTcuMzU2LDUuNjExYzAtLjI1NS0uMjA2LS40NDktLjQ0OS0uNDQ5aC0yLjEyNmMtMS40OTQsMC0yLjcwOSwxLjIxNS0yLjcwOSwyLjcwOXY0LjQ5NGgyLjU3NWMxLjQ5NCwwLDIuNzA5LTEuMjE1LDIuNzA5LTIuNzA5di00LjA0NVoiLz48cGF0aCBzdHJva2Utd2lkdGg9IjAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbD0idXJsKCN1dWlkLTVhNGNmMjE1LTQ5MzItNGYxMi04YWYxLTFiNjgzM2RmMjU5YykiIGQ9Im0xMi4wNjEuMDEyYy0uNDEzLDAtLjc0MS4zMjgtLjc0MS43NDFsLS4wNzMsMTMuNjRjMCwxLjk5Mi0xLjYxNSwzLjYwNy0zLjYwNywzLjYwN0gxLjA5M2MtLjMxNiwwLS41MjItLjMwNC0uNDI1LS41OTVMNS45MTUsMi40MjlDNi40MjUuOTg0LDcuNzg1LjAxMiw5LjMxNi4wMTJoMi43NTctLjAxMloiLz48L3N2Zz4=;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-21">
          <mxGeometry x="280.5" y="110" width="37" height="39.18" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-26" value="Azure Cloud" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=2" vertex="1" parent="-JcRy6otO31GiCju6Gh6-21">
          <mxGeometry x="220" y="160" width="110" height="30" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-22" value="HTTP" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="-JcRy6otO31GiCju6Gh6-7" target="-JcRy6otO31GiCju6Gh6-1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="250" y="210" as="sourcePoint" />
            <mxPoint x="300" y="160" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-23" value="WebSocket" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="-JcRy6otO31GiCju6Gh6-10" target="-JcRy6otO31GiCju6Gh6-29">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="530" y="220" as="sourcePoint" />
            <mxPoint x="580" y="170" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-24" value="HTTP (Azure API calls)" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="-JcRy6otO31GiCju6Gh6-17" target="-JcRy6otO31GiCju6Gh6-7">
          <mxGeometry x="0.2727" y="-5" width="50" height="50" relative="1" as="geometry">
            <mxPoint x="430" y="450" as="sourcePoint" />
            <mxPoint x="480" y="400" as="targetPoint" />
            <mxPoint as="offset" />
          </mxGeometry>
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-27" value="Hosted on PartyKit Cloud" style="text;html=1;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=2" vertex="1" parent="1">
          <mxGeometry x="640" y="361" width="150" height="30" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-28" value="Hosted on Netlify" style="text;html=1;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=2" vertex="1" parent="1">
          <mxGeometry x="240" y="360" width="150" height="30" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-29" value="Hosted on Netlify" style="text;html=1;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=2" vertex="1" parent="1">
          <mxGeometry x="440" y="140" width="150" height="30" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
