all repos — h3 @ 8b15c53a9e7d2c4f003adcb15015c9a3fabc0a17

A tiny, extremely minimalist JavaScript microframework.

Removed h3.equal method.
h3rald h3rald@h3rald.com
Thu, 23 Apr 2020 20:38:00 +0200
commit

8b15c53a9e7d2c4f003adcb15015c9a3fabc0a17

parent

fa6257d886099a912862f0f0ae242d17c4c853cb

M README.mdREADME.md

@@ -13,7 +13,7 @@ H3 is also:

- **tiny**, under [700 sloc](https://github.com/h3rald/h3/blob/master/h3.js). - **modern**, in the sense that it runs only in modern browsers (latest versions of Chrome, Firefox, Edge & similar). -- **easy** to learn, its API is comprised of only seven methods and two properties. +- **easy** to learn, its API is comprised of only six methods and two properties. ### I'm sold! Where can I get it?
M __tests__/h3.js__tests__/h3.js

@@ -1,75 +1,14 @@

const h3 = require("../h3.js").default; describe("h3", () => { - it("should expose an equal method to check object/array/function equality", () => { - expect(h3.equal({}, {})).toBeTruthy(); - expect(h3.equal([], [])).toBeTruthy(); - expect(h3.equal([], [1])).toBeFalsy(); - expect(h3.equal([2], [1])).toBeFalsy(); - expect(h3.equal([], {})).toBeFalsy(); - expect(h3.equal({ a: 1 }, { a: 1 })).toBeTruthy(); - expect(h3.equal({ a: 1 }, { b: 1 })).toBeFalsy(); - expect(h3.equal({ a: 1 }, { a: 2 })).toBeFalsy(); - expect(h3.equal({ a: 1 }, { a: 1, b: 2 })).toBeFalsy(); - expect(h3.equal(undefined, undefined)).toBeTruthy(); - expect(h3.equal(undefined, null)).toBeFalsy(); - expect(h3.equal(null, 1)).toBeFalsy(); - expect(h3.equal(null, null)).toBeTruthy(); - expect( - h3.equal( - () => 1, - () => 1 - ) - ).toBeTruthy(); - expect( - h3.equal( - () => 1, - () => 2 - ) - ).toBeFalsy(); - expect(h3.equal([1, 2, 3], [1, 2, 3])).toBeTruthy(); - expect(h3.equal([1, 2, 3], [1, 4, 3])).toBeFalsy(); - expect(h3.equal([1, 2, 3], [1, 3])).toBeFalsy(); - }); - - it("should expose an equal method to check nested object/array equality, including standard types and functions", () => { - const obj1 = { - a: 1, - b: 2, - c: { - a: [1, 2, 3, { b: true, d: false }], - d: { - q: null, - v: undefined, - a: [ - { - onclick: function () { - console.log("test"); - }, - }, - ], - }, - }, - }; - const obj2 = { - a: 1, - b: 2, - c: { - a: [1, 2, 3, { b: true, d: false }], - d: { - q: null, - v: undefined, - a: [ - { - onclick: function () { - console.log("test"); - }, - }, - ], - }, - }, - }; - expect(h3.equal(obj1, obj2)).toBe(true); + it("should support a way to discriminate functions and objects", () => { + const v1 = h3("div", {onclick: () => true}); + const v2 = h3("div", {onclick: () => true}); + const v3 = h3("div", {onclick: () => false}); + const v4 = h3("div"); + expect(v1.equalTo(v2)).toEqual(true); + expect(v1.equalTo(v3)).toEqual(false); + expect(v4.equalTo({ type: "div" })).toEqual(false); }); it("should support the creation of empty virtual node elements", () => {
M docs/H3_DeveloperGuide.htmdocs/H3_DeveloperGuide.htm

@@ -7286,7 +7286,6 @@ <li><a href="#Render-child-components">Render child components</a></li>

<li><a href="#Special-attributes">Special attributes</a></li> </ul> </li> - <li><a href="#h3.equal(a:-any,-b:-any)">h3.equal(a: any, b: any)</a></li> <li><a href="#h3.dispatch(message:-string,-data:-any)">h3.dispatch(message: string, data: any)</a></li> <li><a href="#h3.init(config:-object))">h3.init(config: object))</a></li> <li><a href="#h3.navigateTo(path:-string,-params:-object)">h3.navigateTo(path: string, params: object)</a></li>

@@ -7324,7 +7323,7 @@

<ul> <li><strong>tiny</strong>, under <a href="https://github.com/h3rald/h3/blob/master/h3.js">700 sloc</a>.</li> <li><strong>modern</strong>, in the sense that it runs only in modern browsers (latest versions of Chrome, Firefox, Edge &amp; similar).</li> -<li><strong>easy</strong> to learn, its API is comprised of only seven methods and two properties.</li> +<li><strong>easy</strong> to learn, its API is comprised of only six methods and two properties.</li> </ul>

@@ -7512,7 +7511,7 @@ <h3>Sequence Diagram<a href="#document-top" title="Go to top"></a></h3>

<p>The following sequence diagram summarizes how H3 works, from its initialization to the redraw and navigation phases.</p> -<p><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBjb250ZW50U2NyaXB0VHlwZT0iYXBwbGljYXRpb24vZWNtYXNjcmlwdCIgY29udGVudFN0eWxlVHlwZT0idGV4dC9jc3MiIGhlaWdodD0iODgwcHgiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiIHN0eWxlPSJ3aWR0aDo3ODdweDtoZWlnaHQ6ODgwcHg7IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA3ODcgODgwIiB3aWR0aD0iNzg3cHgiIHpvb21BbmRQYW49Im1hZ25pZnkiPjxkZWZzPjxmaWx0ZXIgaGVpZ2h0PSIzMDAlIiBpZD0iZjh2eHV6Y3h2dHV1NSIgd2lkdGg9IjMwMCUiIHg9Ii0xIiB5PSItMSI+PGZlR2F1c3NpYW5CbHVyIHJlc3VsdD0iYmx1ck91dCIgc3RkRGV2aWF0aW9uPSIyLjAiLz48ZmVDb2xvck1hdHJpeCBpbj0iYmx1ck91dCIgcmVzdWx0PSJibHVyT3V0MiIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIC40IDAiLz48ZmVPZmZzZXQgZHg9IjQuMCIgZHk9IjQuMCIgaW49ImJsdXJPdXQyIiByZXN1bHQ9ImJsdXJPdXQzIi8+PGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iYmx1ck91dDMiIG1vZGU9Im5vcm1hbCIvPjwvZmlsdGVyPjwvZGVmcz48Zz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxOCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIyMDgiIHg9IjI4OC43NSIgeT0iMjYuNzA4Ij5IMyBTZXF1ZW5jZSBEaWFncmFtPC90ZXh0PjxyZWN0IGZpbGw9IiNGRkZGRkYiIGZpbHRlcj0idXJsKCNmOHZ4dXpjeHZ0dXU1KSIgaGVpZ2h0PSIxMDQuNTMxMyIgc3R5bGU9InN0cm9rZTogIzAwMDAwMDsgc3Ryb2tlLXdpZHRoOiAyLjA7IiB3aWR0aD0iNTA2LjUiIHg9IjE4Mi41IiB5PSI0NTAuNzEwOSIvPjxyZWN0IGZpbGw9IiNGRkZGRkYiIGZpbHRlcj0idXJsKCNmOHZ4dXpjeHZ0dXU1KSIgaGVpZ2h0PSIyMjEuMDYyNSIgc3R5bGU9InN0cm9rZTogIzAwMDAwMDsgc3Ryb2tlLXdpZHRoOiAyLjA7IiB3aWR0aD0iNjc2IiB4PSIxMyIgeT0iNTY5LjI0MjIiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogNS4wLDUuMDsiIHgxPSI2NCIgeDI9IjY0IiB5MT0iMTAwLjI1IiB5Mj0iODA3LjMwNDciLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogNS4wLDUuMDsiIHgxPSIyMzYuNSIgeDI9IjIzNi41IiB5MT0iMTAwLjI1IiB5Mj0iODA3LjMwNDciLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogNS4wLDUuMDsiIHgxPSIzNzkuNSIgeDI9IjM3OS41IiB5MT0iMTAwLjI1IiB5Mj0iODA3LjMwNDciLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogNS4wLDUuMDsiIHgxPSI0OTMiIHgyPSI0OTMiIHkxPSIxMDAuMjUiIHkyPSI4MDcuMzA0NyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyBzdHJva2UtZGFzaGFycmF5OiA1LjAsNS4wOyIgeDE9IjY1NiIgeDI9IjY1NiIgeTE9IjEwMC4yNSIgeTI9IjgwNy4zMDQ3Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNzciIHg9IjIzIiB5PSI5Ni45NDgyIj5BcHBsaWNhdGlvbjwvdGV4dD48ZWxsaXBzZSBjeD0iNjQuNSIgY3k9IjY3Ljk1MzEiIGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmOHZ4dXpjeHZ0dXU1KSIgcng9IjEyIiByeT0iMTIiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMi4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMi4wOyIgeDE9IjUyLjUiIHgyPSI3Ni41IiB5MT0iODEuOTUzMSIgeTI9IjgxLjk1MzEiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI3NyIgeD0iMjMiIHk9IjgxOS4yOTk4Ij5BcHBsaWNhdGlvbjwvdGV4dD48ZWxsaXBzZSBjeD0iNjQuNSIgY3k9IjgzOC42MDE2IiBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjh2eHV6Y3h2dHV1NSkiIHJ4PSIxMiIgcnk9IjEyIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiIHgxPSI1Mi41IiB4Mj0iNzYuNSIgeTE9Ijg1Mi42MDE2IiB5Mj0iODUyLjYwMTYiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI4MiIgeD0iMTkyLjUiIHk9Ijk2Ljk0ODIiPkNvbXBvbmVudDwvdGV4dD48ZWxsaXBzZSBjeD0iMjM2LjUiIGN5PSI2Ny45NTMxIiBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjh2eHV6Y3h2dHV1NSkiIHJ4PSIxMiIgcnk9IjEyIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiLz48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjIzMi41LDU1Ljk1MzEsMjM4LjUsNTAuOTUzMSwyMzYuNSw1NS45NTMxLDIzOC41LDYwLjk1MzEsMjMyLjUsNTUuOTUzMSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iODIiIHg9IjE5Mi41IiB5PSI4MTkuMjk5OCI+Q29tcG9uZW50PC90ZXh0PjxlbGxpcHNlIGN4PSIyMzYuNSIgY3k9IjgzOC42MDE2IiBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjh2eHV6Y3h2dHV1NSkiIHJ4PSIxMiIgcnk9IjEyIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiLz48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjIzMi41LDgyNi42MDE2LDIzOC41LDgyMS42MDE2LDIzNi41LDgyNi42MDE2LDIzOC41LDgzMS42MDE2LDIzMi41LDgyNi42MDE2IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxOCIgeD0iMzY3LjUiIHk9Ijk2Ljk0ODIiPkgzPC90ZXh0PjxlbGxpcHNlIGN4PSIzNzkuNSIgY3k9IjY3Ljk1MzEiIGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmOHZ4dXpjeHZ0dXU1KSIgcng9IjEyIiByeT0iMTIiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMi4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMi4wOyIgeDE9IjM2Ny41IiB4Mj0iMzkxLjUiIHkxPSI4MS45NTMxIiB5Mj0iODEuOTUzMSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjE4IiB4PSIzNjcuNSIgeT0iODE5LjI5OTgiPkgzPC90ZXh0PjxlbGxpcHNlIGN4PSIzNzkuNSIgY3k9IjgzOC42MDE2IiBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjh2eHV6Y3h2dHV1NSkiIHJ4PSIxMiIgcnk9IjEyIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiIHgxPSIzNjcuNSIgeDI9IjM5MS41IiB5MT0iODUyLjYwMTYiIHkyPSI4NTIuNjAxNiIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjQ3IiB4PSI0NjciIHk9Ijk2Ljk0ODIiPlJvdXRlcjwvdGV4dD48ZWxsaXBzZSBjeD0iNDkzLjUiIGN5PSI2Ny45NTMxIiBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjh2eHV6Y3h2dHV1NSkiIHJ4PSIxMiIgcnk9IjEyIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiIHgxPSI0ODEuNSIgeDI9IjUwNS41IiB5MT0iODEuOTUzMSIgeTI9IjgxLjk1MzEiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI0NyIgeD0iNDY3IiB5PSI4MTkuMjk5OCI+Um91dGVyPC90ZXh0PjxlbGxpcHNlIGN4PSI0OTMuNSIgY3k9IjgzOC42MDE2IiBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjh2eHV6Y3h2dHV1NSkiIHJ4PSIxMiIgcnk9IjEyIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiIHgxPSI0ODEuNSIgeDI9IjUwNS41IiB5MT0iODUyLjYwMTYiIHkyPSI4NTIuNjAxNiIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjM5IiB4PSI2MzQiIHk9Ijk2Ljk0ODIiPlN0b3JlPC90ZXh0PjxwYXRoIGQ9Ik02MzguNSw0Ny45NTMxIEM2MzguNSwzNy45NTMxIDY1Ni41LDM3Ljk1MzEgNjU2LjUsMzcuOTUzMSBDNjU2LjUsMzcuOTUzMSA2NzQuNSwzNy45NTMxIDY3NC41LDQ3Ljk1MzEgTDY3NC41LDczLjk1MzEgQzY3NC41LDgzLjk1MzEgNjU2LjUsODMuOTUzMSA2NTYuNSw4My45NTMxIEM2NTYuNSw4My45NTMxIDYzOC41LDgzLjk1MzEgNjM4LjUsNzMuOTUzMSBMNjM4LjUsNDcuOTUzMSAiIGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmOHZ4dXpjeHZ0dXU1KSIgc3R5bGU9InN0cm9rZTogIzAwMDAwMDsgc3Ryb2tlLXdpZHRoOiAxLjU7Ii8+PHBhdGggZD0iTTYzOC41LDQ3Ljk1MzEgQzYzOC41LDU3Ljk1MzEgNjU2LjUsNTcuOTUzMSA2NTYuNSw1Ny45NTMxIEM2NTYuNSw1Ny45NTMxIDY3NC41LDU3Ljk1MzEgNjc0LjUsNDcuOTUzMSAiIGZpbGw9Im5vbmUiIHN0eWxlPSJzdHJva2U6ICMwMDAwMDA7IHN0cm9rZS13aWR0aDogMS41OyIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjM5IiB4PSI2MzQiIHk9IjgxOS4yOTk4Ij5TdG9yZTwvdGV4dD48cGF0aCBkPSJNNjM4LjUsODMyLjYwMTYgQzYzOC41LDgyMi42MDE2IDY1Ni41LDgyMi42MDE2IDY1Ni41LDgyMi42MDE2IEM2NTYuNSw4MjIuNjAxNiA2NzQuNSw4MjIuNjAxNiA2NzQuNSw4MzIuNjAxNiBMNjc0LjUsODU4LjYwMTYgQzY3NC41LDg2OC42MDE2IDY1Ni41LDg2OC42MDE2IDY1Ni41LDg2OC42MDE2IEM2NTYuNSw4NjguNjAxNiA2MzguNSw4NjguNjAxNiA2MzguNSw4NTguNjAxNiBMNjM4LjUsODMyLjYwMTYgIiBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjh2eHV6Y3h2dHV1NSkiIHN0eWxlPSJzdHJva2U6ICMwMDAwMDA7IHN0cm9rZS13aWR0aDogMS41OyIvPjxwYXRoIGQ9Ik02MzguNSw4MzIuNjAxNiBDNjM4LjUsODQyLjYwMTYgNjU2LjUsODQyLjYwMTYgNjU2LjUsODQyLjYwMTYgQzY1Ni41LDg0Mi42MDE2IDY3NC41LDg0Mi42MDE2IDY3NC41LDgzMi42MDE2ICIgZmlsbD0ibm9uZSIgc3R5bGU9InN0cm9rZTogIzAwMDAwMDsgc3Ryb2tlLXdpZHRoOiAxLjU7Ii8+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSIzNjcuNSwxMjcuMzgyOCwzNzcuNSwxMzEuMzgyOCwzNjcuNSwxMzUuMzgyOCwzNzEuNSwxMzEuMzgyOCIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IHN0cm9rZS1kYXNoYXJyYXk6IDIuMCwyLjA7IiB4MT0iNjQuNSIgeDI9IjM3My41IiB5MT0iMTMxLjM4MjgiIHkyPSIxMzEuMzgyOCIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI1OCIgeD0iNzEuNSIgeT0iMTI2LjMxNjkiPmgzLmluaXQoKTwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjY0NC41LDE1Ni41MTU2LDY1NC41LDE2MC41MTU2LDY0NC41LDE2NC41MTU2LDY0OC41LDE2MC41MTU2IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSIzNzkuNSIgeDI9IjY1MC41IiB5MT0iMTYwLjUxNTYiIHkyPSIxNjAuNTE1NiIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXN0eWxlPSJpdGFsaWMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNTYiIHg9IjM4Ni41IiB5PSIxNTUuNDQ5NyI+aW5pdGlhbGl6ZTwvdGV4dD48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2NTYuNSIgeDI9IjY5OC41IiB5MT0iMTg5LjY0ODQiIHkyPSIxODkuNjQ4NCIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjY5OC41IiB4Mj0iNjk4LjUiIHkxPSIxODkuNjQ4NCIgeTI9IjIwMi42NDg0Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjU3LjUiIHgyPSI2OTguNSIgeTE9IjIwMi42NDg0IiB5Mj0iMjAyLjY0ODQiLz48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjY2Ny41LDE5OC42NDg0LDY1Ny41LDIwMi42NDg0LDY2Ny41LDIwNi42NDg0LDY2My41LDIwMi42NDg0IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgZm9udC1zdHlsZT0iaXRhbGljIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjExMiIgeD0iNjYzLjUiIHk9IjE4NC41ODI1Ij5leGVjdXRlIG1vZHVsZXM8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI2NDQuNSwyMjcuNzgxMyw2NTQuNSwyMzEuNzgxMyw2NDQuNSwyMzUuNzgxMyw2NDguNSwyMzEuNzgxMyIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMzc5LjUiIHgyPSI2NTAuNSIgeTE9IjIzMS43ODEzIiB5Mj0iMjMxLjc4MTMiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI5MSIgeD0iMzg2LjUiIHk9IjIyNi43MTUzIj5kaXNwYXRjaCgkaW5pdCk8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI3NS41LDI1Ni45MTQxLDY1LjUsMjYwLjkxNDEsNzUuNSwyNjQuOTE0MSw3MS41LDI2MC45MTQxIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2OS41IiB4Mj0iMzc4LjUiIHkxPSIyNjAuOTE0MSIgeTI9IjI2MC45MTQxIi8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNjQiIHg9IjgxLjUiIHk9IjI1NS44NDgxIj5wcmVTdGFydCgpPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iNDgxLjUsMjg2LjA0NjksNDkxLjUsMjkwLjA0NjksNDgxLjUsMjk0LjA0NjksNDg1LjUsMjkwLjA0NjkiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjM3OS41IiB4Mj0iNDg3LjUiIHkxPSIyOTAuMDQ2OSIgeTI9IjI5MC4wNDY5Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtc3R5bGU9Iml0YWxpYyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI1NiIgeD0iMzg2LjUiIHk9IjI4NC45ODEiPmluaXRpYWxpemU8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI0ODEuNSwzMTUuMTc5Nyw0OTEuNSwzMTkuMTc5Nyw0ODEuNSwzMjMuMTc5Nyw0ODUuNSwzMTkuMTc5NyIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMzc5LjUiIHgyPSI0ODcuNSIgeTE9IjMxOS4xNzk3IiB5Mj0iMzE5LjE3OTciLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI0MCIgeD0iMzg2LjUiIHk9IjMxNC4xMTM4Ij5zdGFydCgpPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iMjQ3LjUsMzQ0LjMxMjUsMjM3LjUsMzQ4LjMxMjUsMjQ3LjUsMzUyLjMxMjUsMjQzLjUsMzQ4LjMxMjUiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjI0MS41IiB4Mj0iNDkyLjUiIHkxPSIzNDguMzEyNSIgeTI9IjM0OC4zMTI1Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNTQiIHg9IjI1My41IiB5PSIzNDMuMjQ2NiI+cmVuZGVyKCk8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI2NDQuNSwzNzMuNDQ1Myw2NTQuNSwzNzcuNDQ1Myw2NDQuNSwzODEuNDQ1Myw2NDguNSwzNzcuNDQ1MyIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNDkzLjUiIHgyPSI2NTAuNSIgeTE9IjM3Ny40NDUzIiB5Mj0iMzc3LjQ0NTMiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxMTgiIHg9IjUwMC41IiB5PSIzNzIuMzc5NCI+ZGlzcGF0Y2goJHJlZHJhdyk8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI2NDQuNSw0MDIuNTc4MSw2NTQuNSw0MDYuNTc4MSw2NDQuNSw0MTAuNTc4MSw2NDguNSw0MDYuNTc4MSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNDkzLjUiIHgyPSI2NTAuNSIgeTE9IjQwNi41NzgxIiB5Mj0iNDA2LjU3ODEiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxMzkiIHg9IjUwMC41IiB5PSI0MDEuNTEyMiI+ZGlzcGF0Y2goJG5hdmlnYXRpb24pPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iNzUuNSw0MzEuNzEwOSw2NS41LDQzNS43MTA5LDc1LjUsNDM5LjcxMDksNzEuNSw0MzUuNzEwOSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjkuNSIgeDI9IjM3OC41IiB5MT0iNDM1LjcxMDkiIHkyPSI0MzUuNzEwOSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjcwIiB4PSI4MS41IiB5PSI0MzAuNjQ1Ij5wb3N0U3RhcnQoKTwvdGV4dD48cGF0aCBkPSJNMTgyLjUsNDUwLjcxMDkgTDI4MC41LDQ1MC43MTA5IEwyODAuNSw0NTcuNzEwOSBMMjcwLjUsNDY3LjcxMDkgTDE4Mi41LDQ2Ny43MTA5IEwxODIuNSw0NTAuNzEwOSAiIGZpbGw9IiNFRUVFRUUiIHN0eWxlPSJzdHJva2U6ICMwMDAwMDA7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMTA0LjUzMTMiIHN0eWxlPSJzdHJva2U6ICMwMDAwMDA7IHN0cm9rZS13aWR0aDogMi4wOyIgd2lkdGg9IjUwNi41IiB4PSIxODIuNSIgeT0iNDUwLjcxMDkiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9ImJvbGQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNTMiIHg9IjE5Ny41IiB5PSI0NjMuNzc3OCI+cmVkcmF3PC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iMzY3LjUsNDg0Ljk3NjYsMzc3LjUsNDg4Ljk3NjYsMzY3LjUsNDkyLjk3NjYsMzcxLjUsNDg4Ljk3NjYiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjIzNi41IiB4Mj0iMzczLjUiIHkxPSI0ODguOTc2NiIgeTI9IjQ4OC45NzY2Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9Ijg2IiB4PSIyNDMuNSIgeT0iNDgzLjkxMDYiPmgzLnJlZHJhdygpPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iMjQ3LjUsNTE0LjEwOTQsMjM3LjUsNTE4LjEwOTQsMjQ3LjUsNTIyLjEwOTQsMjQzLjUsNTE4LjEwOTQiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjI0MS41IiB4Mj0iMzc4LjUiIHkxPSI1MTguMTA5NCIgeTI9IjUxOC4xMDk0Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNTYiIHg9IjI1My41IiB5PSI1MTMuMDQzNSI+cmVkcmF3KCk8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI2NDQuNSw1NDMuMjQyMiw2NTQuNSw1NDcuMjQyMiw2NDQuNSw1NTEuMjQyMiw2NDguNSw1NDcuMjQyMiIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMzc5LjUiIHgyPSI2NTAuNSIgeTE9IjU0Ny4yNDIyIiB5Mj0iNTQ3LjI0MjIiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxMTgiIHg9IjM4Ni41IiB5PSI1NDIuMTc2MyI+ZGlzcGF0Y2goJHJlZHJhdyk8L3RleHQ+PHBhdGggZD0iTTEzLDU2OS4yNDIyIEwxMzcsNTY5LjI0MjIgTDEzNyw1NzYuMjQyMiBMMTI3LDU4Ni4yNDIyIEwxMyw1ODYuMjQyMiBMMTMsNTY5LjI0MjIgIiBmaWxsPSIjRUVFRUVFIiBzdHlsZT0ic3Ryb2tlOiAjMDAwMDAwOyBzdHJva2Utd2lkdGg6IDEuMDsiLz48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjIyMS4wNjI1IiBzdHlsZT0ic3Ryb2tlOiAjMDAwMDAwOyBzdHJva2Utd2lkdGg6IDIuMDsiIHdpZHRoPSI2NzYiIHg9IjEzIiB5PSI1NjkuMjQyMiIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI3OSIgeD0iMjgiIHk9IjU4Mi4zMDkxIj5uYXZpZ2F0aW9uPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iMzY3LjUsNjAzLjUwNzgsMzc3LjUsNjA3LjUwNzgsMzY3LjUsNjExLjUwNzgsMzcxLjUsNjA3LjUwNzgiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjIzNi41IiB4Mj0iMzczLjUiIHkxPSI2MDcuNTA3OCIgeTI9IjYwNy41MDc4Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjExOSIgeD0iMjQzLjUiIHk9IjYwMi40NDE5Ij5oMy5uYXZpZ2F0ZVRvKCk8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI0ODEuNSw2MzIuNjQwNiw0OTEuNSw2MzYuNjQwNiw0ODEuNSw2NDAuNjQwNiw0ODUuNSw2MzYuNjQwNiIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMzc5LjUiIHgyPSI0ODcuNSIgeTE9IjYzNi42NDA2IiB5Mj0iNjM2LjY0MDYiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI5MCIgeD0iMzg2LjUiIHk9IjYzMS41NzQ3Ij5wcm9jZXNzUGF0aCgpPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iNzUuNSw2NjEuNzczNCw2NS41LDY2NS43NzM0LDc1LjUsNjY5Ljc3MzQsNzEuNSw2NjUuNzczNCIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjkuNSIgeDI9IjQ5Mi41IiB5MT0iNjY1Ljc3MzQiIHkyPSI2NjUuNzczNCIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXN0eWxlPSJpdGFsaWMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMTQ4IiB4PSI4MS41IiB5PSI2NjAuNzA3NSI+cmVtb3ZlIGFsbCBET00gbm9kZXM8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSIyMjQuNSw2OTAuOTA2MywyMzQuNSw2OTQuOTA2MywyMjQuNSw2OTguOTA2MywyMjguNSw2OTQuOTA2MyIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjQuNSIgeDI9IjIzMC41IiB5MT0iNjk0LjkwNjMiIHkyPSI2OTQuOTA2MyIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXN0eWxlPSJpdGFsaWMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMTQ4IiB4PSI3MS41IiB5PSI2ODkuODQwMyI+cmVtb3ZlIGFsbCBET00gbm9kZXM8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSIyNDcuNSw3MjAuMDM5MSwyMzcuNSw3MjQuMDM5MSwyNDcuNSw3MjguMDM5MSwyNDMuNSw3MjQuMDM5MSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMjQxLjUiIHgyPSI0OTIuNSIgeTE9IjcyNC4wMzkxIiB5Mj0iNzI0LjAzOTEiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI1NCIgeD0iMjUzLjUiIHk9IjcxOC45NzMxIj5yZW5kZXIoKTwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjY0NC41LDc0OS4xNzE5LDY1NC41LDc1My4xNzE5LDY0NC41LDc1Ny4xNzE5LDY0OC41LDc1My4xNzE5IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI0OTMuNSIgeDI9IjY1MC41IiB5MT0iNzUzLjE3MTkiIHkyPSI3NTMuMTcxOSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjExOCIgeD0iNTAwLjUiIHk9Ijc0OC4xMDYiPmRpc3BhdGNoKCRyZWRyYXcpPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iNjQ0LjUsNzc4LjMwNDcsNjU0LjUsNzgyLjMwNDcsNjQ0LjUsNzg2LjMwNDcsNjQ4LjUsNzgyLjMwNDciIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjQ5My41IiB4Mj0iNjUwLjUiIHkxPSI3ODIuMzA0NyIgeTI9Ijc4Mi4zMDQ3Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMTM5IiB4PSI1MDAuNSIgeT0iNzc3LjIzODgiPmRpc3BhdGNoKCRuYXZpZ2F0aW9uKTwvdGV4dD48IS0tTUQ1PVszNTJkNDMxYjJlY2QyZjllZTQ4YTdkNmVmYzg5MDQzNl0KQHN0YXJ0dW1sDQp0aXRsZSBIMyBTZXF1ZW5jZSBEaWFncmFtDQoNCmVudGl0eSBBcHBsaWNhdGlvbg0KY29udHJvbCBDb21wb25lbnQNCmVudGl0eSBIMw0KZW50aXR5IFJvdXRlcg0KZGF0YWJhc2UgU3RvcmUNCg0KQXBwbGljYXRpb24gLSAtPiBIMyA6IDxiPmgzLmluaXQoKTwvYj4NCkgzIC0+IFN0b3JlIDogLy9pbml0aWFsaXplLy8NClN0b3JlIC0+IFN0b3JlIDogLy9leGVjdXRlIG1vZHVsZXMvLw0KSDMgLT4gU3RvcmUgOiBkaXNwYXRjaCgkaW5pdCkNCkgzIC0+IEFwcGxpY2F0aW9uIDogcHJlU3RhcnQoKQ0KSDMgLT4gUm91dGVyIDogLy9pbml0aWFsaXplLy8NCkgzIC0+IFJvdXRlciA6IHN0YXJ0KCkNClJvdXRlciAtPiBDb21wb25lbnQgOiByZW5kZXIoKQ0KUm91dGVyIC0+IFN0b3JlOiBkaXNwYXRjaCgkcmVkcmF3KQ0KUm91dGVyIC0+IFN0b3JlOiBkaXNwYXRjaCgkbmF2aWdhdGlvbikNCkgzIC0+IEFwcGxpY2F0aW9uIDogcG9zdFN0YXJ0KCkNCg0KZ3JvdXAgcmVkcmF3DQogICAgQ29tcG9uZW50IC0+IEgzIDogPGI+aDMucmVkcmF3KCk8L2I+DQogICAgSDMgLT4gQ29tcG9uZW50IDogcmVkcmF3KCkNCiAgICBIMyAtPiBTdG9yZTogZGlzcGF0Y2goJHJlZHJhdykNCmVuZA0KDQpncm91cCBuYXZpZ2F0aW9uDQogICAgQ29tcG9uZW50IC0+IEgzIDogPGI+aDMubmF2aWdhdGVUbygpPC9iPg0KICAgIEgzIC0+IFJvdXRlciA6IHByb2Nlc3NQYXRoKCkNCiAgICBSb3V0ZXIgLT4gQXBwbGljYXRpb24gOiAvL3JlbW92ZSBhbGwgRE9NIG5vZGVzLy8NCiAgICBBcHBsaWNhdGlvbiAtPiBDb21wb25lbnQgOiAvL3JlbW92ZSBhbGwgRE9NIG5vZGVzLy8NCiAgICBSb3V0ZXIgLT4gQ29tcG9uZW50IDogcmVuZGVyKCkNCiAgICBSb3V0ZXIgLT4gU3RvcmU6IGRpc3BhdGNoKCRyZWRyYXcpDQogICAgUm91dGVyIC0+IFN0b3JlOiBkaXNwYXRjaCgkbmF2aWdhdGlvbikNCmVuZA0KQGVuZHVtbA0KClBsYW50VU1MIHZlcnNpb24gMS4yMDIwLjA4YmV0YTEoVW5rbm93biBjb21waWxlIHRpbWUpCihHUEwgc291cmNlIGRpc3RyaWJ1dGlvbikKSmF2YSBSdW50aW1lOiBKYXZhKFRNKSBTRSBSdW50aW1lIEVudmlyb25tZW50CkpWTTogSmF2YSBIb3RTcG90KFRNKSA2NC1CaXQgU2VydmVyIFZNCkphdmEgVmVyc2lvbjogMTQuMC4xKzcKT3BlcmF0aW5nIFN5c3RlbTogTGludXgKRGVmYXVsdCBFbmNvZGluZzogVVRGLTgKTGFuZ3VhZ2U6IGVuCkNvdW50cnk6IFVTCi0tPjwvZz48L3N2Zz4=" alt="Sequence Diagram" /></p> +<p><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBjb250ZW50U2NyaXB0VHlwZT0iYXBwbGljYXRpb24vZWNtYXNjcmlwdCIgY29udGVudFN0eWxlVHlwZT0idGV4dC9jc3MiIGhlaWdodD0iODgwcHgiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiIHN0eWxlPSJ3aWR0aDo3ODdweDtoZWlnaHQ6ODgwcHg7IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA3ODcgODgwIiB3aWR0aD0iNzg3cHgiIHpvb21BbmRQYW49Im1hZ25pZnkiPjxkZWZzPjxmaWx0ZXIgaGVpZ2h0PSIzMDAlIiBpZD0iZjh2eHV6Y3h2dHV1NSIgd2lkdGg9IjMwMCUiIHg9Ii0xIiB5PSItMSI+PGZlR2F1c3NpYW5CbHVyIHJlc3VsdD0iYmx1ck91dCIgc3RkRGV2aWF0aW9uPSIyLjAiLz48ZmVDb2xvck1hdHJpeCBpbj0iYmx1ck91dCIgcmVzdWx0PSJibHVyT3V0MiIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIC40IDAiLz48ZmVPZmZzZXQgZHg9IjQuMCIgZHk9IjQuMCIgaW49ImJsdXJPdXQyIiByZXN1bHQ9ImJsdXJPdXQzIi8+PGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iYmx1ck91dDMiIG1vZGU9Im5vcm1hbCIvPjwvZmlsdGVyPjwvZGVmcz48Zz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxOCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIyMDgiIHg9IjI4OC43NSIgeT0iMjYuNzA4Ij5IMyBTZXF1ZW5jZSBEaWFncmFtPC90ZXh0PjxyZWN0IGZpbGw9IiNGRkZGRkYiIGZpbHRlcj0idXJsKCNmOHZ4dXpjeHZ0dXU1KSIgaGVpZ2h0PSIxMDQuNTMxMyIgc3R5bGU9InN0cm9rZTogIzAwMDAwMDsgc3Ryb2tlLXdpZHRoOiAyLjA7IiB3aWR0aD0iNTA2LjUiIHg9IjE4Mi41IiB5PSI0NTAuNzEwOSIvPjxyZWN0IGZpbGw9IiNGRkZGRkYiIGZpbHRlcj0idXJsKCNmOHZ4dXpjeHZ0dXU1KSIgaGVpZ2h0PSIyMjEuMDYyNSIgc3R5bGU9InN0cm9rZTogIzAwMDAwMDsgc3Ryb2tlLXdpZHRoOiAyLjA7IiB3aWR0aD0iNjc2IiB4PSIxMyIgeT0iNTY5LjI0MjIiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogNS4wLDUuMDsiIHgxPSI2NCIgeDI9IjY0IiB5MT0iMTAwLjI1IiB5Mj0iODA3LjMwNDciLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogNS4wLDUuMDsiIHgxPSIyMzYuNSIgeDI9IjIzNi41IiB5MT0iMTAwLjI1IiB5Mj0iODA3LjMwNDciLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogNS4wLDUuMDsiIHgxPSIzNzkuNSIgeDI9IjM3OS41IiB5MT0iMTAwLjI1IiB5Mj0iODA3LjMwNDciLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogNS4wLDUuMDsiIHgxPSI0OTMiIHgyPSI0OTMiIHkxPSIxMDAuMjUiIHkyPSI4MDcuMzA0NyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyBzdHJva2UtZGFzaGFycmF5OiA1LjAsNS4wOyIgeDE9IjY1NiIgeDI9IjY1NiIgeTE9IjEwMC4yNSIgeTI9IjgwNy4zMDQ3Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNzciIHg9IjIzIiB5PSI5Ni45NDgyIj5BcHBsaWNhdGlvbjwvdGV4dD48ZWxsaXBzZSBjeD0iNjQuNSIgY3k9IjY3Ljk1MzEiIGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmOHZ4dXpjeHZ0dXU1KSIgcng9IjEyIiByeT0iMTIiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMi4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMi4wOyIgeDE9IjUyLjUiIHgyPSI3Ni41IiB5MT0iODEuOTUzMSIgeTI9IjgxLjk1MzEiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI3NyIgeD0iMjMiIHk9IjgxOS4yOTk4Ij5BcHBsaWNhdGlvbjwvdGV4dD48ZWxsaXBzZSBjeD0iNjQuNSIgY3k9IjgzOC42MDE2IiBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjh2eHV6Y3h2dHV1NSkiIHJ4PSIxMiIgcnk9IjEyIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiIHgxPSI1Mi41IiB4Mj0iNzYuNSIgeTE9Ijg1Mi42MDE2IiB5Mj0iODUyLjYwMTYiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI4MiIgeD0iMTkyLjUiIHk9Ijk2Ljk0ODIiPkNvbXBvbmVudDwvdGV4dD48ZWxsaXBzZSBjeD0iMjM2LjUiIGN5PSI2Ny45NTMxIiBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjh2eHV6Y3h2dHV1NSkiIHJ4PSIxMiIgcnk9IjEyIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiLz48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjIzMi41LDU1Ljk1MzEsMjM4LjUsNTAuOTUzMSwyMzYuNSw1NS45NTMxLDIzOC41LDYwLjk1MzEsMjMyLjUsNTUuOTUzMSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iODIiIHg9IjE5Mi41IiB5PSI4MTkuMjk5OCI+Q29tcG9uZW50PC90ZXh0PjxlbGxpcHNlIGN4PSIyMzYuNSIgY3k9IjgzOC42MDE2IiBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjh2eHV6Y3h2dHV1NSkiIHJ4PSIxMiIgcnk9IjEyIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiLz48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjIzMi41LDgyNi42MDE2LDIzOC41LDgyMS42MDE2LDIzNi41LDgyNi42MDE2LDIzOC41LDgzMS42MDE2LDIzMi41LDgyNi42MDE2IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxOCIgeD0iMzY3LjUiIHk9Ijk2Ljk0ODIiPkgzPC90ZXh0PjxlbGxpcHNlIGN4PSIzNzkuNSIgY3k9IjY3Ljk1MzEiIGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmOHZ4dXpjeHZ0dXU1KSIgcng9IjEyIiByeT0iMTIiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMi4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMi4wOyIgeDE9IjM2Ny41IiB4Mj0iMzkxLjUiIHkxPSI4MS45NTMxIiB5Mj0iODEuOTUzMSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjE4IiB4PSIzNjcuNSIgeT0iODE5LjI5OTgiPkgzPC90ZXh0PjxlbGxpcHNlIGN4PSIzNzkuNSIgY3k9IjgzOC42MDE2IiBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjh2eHV6Y3h2dHV1NSkiIHJ4PSIxMiIgcnk9IjEyIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiIHgxPSIzNjcuNSIgeDI9IjM5MS41IiB5MT0iODUyLjYwMTYiIHkyPSI4NTIuNjAxNiIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjQ3IiB4PSI0NjciIHk9Ijk2Ljk0ODIiPlJvdXRlcjwvdGV4dD48ZWxsaXBzZSBjeD0iNDkzLjUiIGN5PSI2Ny45NTMxIiBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjh2eHV6Y3h2dHV1NSkiIHJ4PSIxMiIgcnk9IjEyIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiIHgxPSI0ODEuNSIgeDI9IjUwNS41IiB5MT0iODEuOTUzMSIgeTI9IjgxLjk1MzEiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI0NyIgeD0iNDY3IiB5PSI4MTkuMjk5OCI+Um91dGVyPC90ZXh0PjxlbGxpcHNlIGN4PSI0OTMuNSIgY3k9IjgzOC42MDE2IiBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjh2eHV6Y3h2dHV1NSkiIHJ4PSIxMiIgcnk9IjEyIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDIuMDsiIHgxPSI0ODEuNSIgeDI9IjUwNS41IiB5MT0iODUyLjYwMTYiIHkyPSI4NTIuNjAxNiIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjM5IiB4PSI2MzQiIHk9Ijk2Ljk0ODIiPlN0b3JlPC90ZXh0PjxwYXRoIGQ9Ik02MzguNSw0Ny45NTMxIEM2MzguNSwzNy45NTMxIDY1Ni41LDM3Ljk1MzEgNjU2LjUsMzcuOTUzMSBDNjU2LjUsMzcuOTUzMSA2NzQuNSwzNy45NTMxIDY3NC41LDQ3Ljk1MzEgTDY3NC41LDczLjk1MzEgQzY3NC41LDgzLjk1MzEgNjU2LjUsODMuOTUzMSA2NTYuNSw4My45NTMxIEM2NTYuNSw4My45NTMxIDYzOC41LDgzLjk1MzEgNjM4LjUsNzMuOTUzMSBMNjM4LjUsNDcuOTUzMSAiIGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmOHZ4dXpjeHZ0dXU1KSIgc3R5bGU9InN0cm9rZTogIzAwMDAwMDsgc3Ryb2tlLXdpZHRoOiAxLjU7Ii8+PHBhdGggZD0iTTYzOC41LDQ3Ljk1MzEgQzYzOC41LDU3Ljk1MzEgNjU2LjUsNTcuOTUzMSA2NTYuNSw1Ny45NTMxIEM2NTYuNSw1Ny45NTMxIDY3NC41LDU3Ljk1MzEgNjc0LjUsNDcuOTUzMSAiIGZpbGw9Im5vbmUiIHN0eWxlPSJzdHJva2U6ICMwMDAwMDA7IHN0cm9rZS13aWR0aDogMS41OyIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjM5IiB4PSI2MzQiIHk9IjgxOS4yOTk4Ij5TdG9yZTwvdGV4dD48cGF0aCBkPSJNNjM4LjUsODMyLjYwMTYgQzYzOC41LDgyMi42MDE2IDY1Ni41LDgyMi42MDE2IDY1Ni41LDgyMi42MDE2IEM2NTYuNSw4MjIuNjAxNiA2NzQuNSw4MjIuNjAxNiA2NzQuNSw4MzIuNjAxNiBMNjc0LjUsODU4LjYwMTYgQzY3NC41LDg2OC42MDE2IDY1Ni41LDg2OC42MDE2IDY1Ni41LDg2OC42MDE2IEM2NTYuNSw4NjguNjAxNiA2MzguNSw4NjguNjAxNiA2MzguNSw4NTguNjAxNiBMNjM4LjUsODMyLjYwMTYgIiBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZjh2eHV6Y3h2dHV1NSkiIHN0eWxlPSJzdHJva2U6ICMwMDAwMDA7IHN0cm9rZS13aWR0aDogMS41OyIvPjxwYXRoIGQ9Ik02MzguNSw4MzIuNjAxNiBDNjM4LjUsODQyLjYwMTYgNjU2LjUsODQyLjYwMTYgNjU2LjUsODQyLjYwMTYgQzY1Ni41LDg0Mi42MDE2IDY3NC41LDg0Mi42MDE2IDY3NC41LDgzMi42MDE2ICIgZmlsbD0ibm9uZSIgc3R5bGU9InN0cm9rZTogIzAwMDAwMDsgc3Ryb2tlLXdpZHRoOiAxLjU7Ii8+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSIzNjcuNSwxMjcuMzgyOCwzNzcuNSwxMzEuMzgyOCwzNjcuNSwxMzUuMzgyOCwzNzEuNSwxMzEuMzgyOCIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IHN0cm9rZS1kYXNoYXJyYXk6IDIuMCwyLjA7IiB4MT0iNjQuNSIgeDI9IjM3My41IiB5MT0iMTMxLjM4MjgiIHkyPSIxMzEuMzgyOCIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI1OCIgeD0iNzEuNSIgeT0iMTI2LjMxNjkiPmgzLmluaXQoKTwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjY0NC41LDE1Ni41MTU2LDY1NC41LDE2MC41MTU2LDY0NC41LDE2NC41MTU2LDY0OC41LDE2MC41MTU2IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSIzNzkuNSIgeDI9IjY1MC41IiB5MT0iMTYwLjUxNTYiIHkyPSIxNjAuNTE1NiIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXN0eWxlPSJpdGFsaWMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNTYiIHg9IjM4Ni41IiB5PSIxNTUuNDQ5NyI+aW5pdGlhbGl6ZTwvdGV4dD48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2NTYuNSIgeDI9IjY5OC41IiB5MT0iMTg5LjY0ODQiIHkyPSIxODkuNjQ4NCIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjY5OC41IiB4Mj0iNjk4LjUiIHkxPSIxODkuNjQ4NCIgeTI9IjIwMi42NDg0Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjU3LjUiIHgyPSI2OTguNSIgeTE9IjIwMi42NDg0IiB5Mj0iMjAyLjY0ODQiLz48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjY2Ny41LDE5OC42NDg0LDY1Ny41LDIwMi42NDg0LDY2Ny41LDIwNi42NDg0LDY2My41LDIwMi42NDg0IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgZm9udC1zdHlsZT0iaXRhbGljIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjExMiIgeD0iNjYzLjUiIHk9IjE4NC41ODI1Ij5leGVjdXRlIG1vZHVsZXM8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI2NDQuNSwyMjcuNzgxMyw2NTQuNSwyMzEuNzgxMyw2NDQuNSwyMzUuNzgxMyw2NDguNSwyMzEuNzgxMyIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMzc5LjUiIHgyPSI2NTAuNSIgeTE9IjIzMS43ODEzIiB5Mj0iMjMxLjc4MTMiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI5MSIgeD0iMzg2LjUiIHk9IjIyNi43MTUzIj5kaXNwYXRjaCgkaW5pdCk8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI3NS41LDI1Ni45MTQxLDY1LjUsMjYwLjkxNDEsNzUuNSwyNjQuOTE0MSw3MS41LDI2MC45MTQxIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2OS41IiB4Mj0iMzc4LjUiIHkxPSIyNjAuOTE0MSIgeTI9IjI2MC45MTQxIi8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNjQiIHg9IjgxLjUiIHk9IjI1NS44NDgxIj5wcmVTdGFydCgpPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iNDgxLjUsMjg2LjA0NjksNDkxLjUsMjkwLjA0NjksNDgxLjUsMjk0LjA0NjksNDg1LjUsMjkwLjA0NjkiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjM3OS41IiB4Mj0iNDg3LjUiIHkxPSIyOTAuMDQ2OSIgeTI9IjI5MC4wNDY5Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtc3R5bGU9Iml0YWxpYyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI1NiIgeD0iMzg2LjUiIHk9IjI4NC45ODEiPmluaXRpYWxpemU8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI0ODEuNSwzMTUuMTc5Nyw0OTEuNSwzMTkuMTc5Nyw0ODEuNSwzMjMuMTc5Nyw0ODUuNSwzMTkuMTc5NyIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMzc5LjUiIHgyPSI0ODcuNSIgeTE9IjMxOS4xNzk3IiB5Mj0iMzE5LjE3OTciLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI0MCIgeD0iMzg2LjUiIHk9IjMxNC4xMTM4Ij5zdGFydCgpPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iMjQ3LjUsMzQ0LjMxMjUsMjM3LjUsMzQ4LjMxMjUsMjQ3LjUsMzUyLjMxMjUsMjQzLjUsMzQ4LjMxMjUiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjI0MS41IiB4Mj0iNDkyLjUiIHkxPSIzNDguMzEyNSIgeTI9IjM0OC4zMTI1Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNTQiIHg9IjI1My41IiB5PSIzNDMuMjQ2NiI+cmVuZGVyKCk8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI2NDQuNSwzNzMuNDQ1Myw2NTQuNSwzNzcuNDQ1Myw2NDQuNSwzODEuNDQ1Myw2NDguNSwzNzcuNDQ1MyIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNDkzLjUiIHgyPSI2NTAuNSIgeTE9IjM3Ny40NDUzIiB5Mj0iMzc3LjQ0NTMiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxMTgiIHg9IjUwMC41IiB5PSIzNzIuMzc5NCI+ZGlzcGF0Y2goJHJlZHJhdyk8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI2NDQuNSw0MDIuNTc4MSw2NTQuNSw0MDYuNTc4MSw2NDQuNSw0MTAuNTc4MSw2NDguNSw0MDYuNTc4MSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNDkzLjUiIHgyPSI2NTAuNSIgeTE9IjQwNi41NzgxIiB5Mj0iNDA2LjU3ODEiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxMzkiIHg9IjUwMC41IiB5PSI0MDEuNTEyMiI+ZGlzcGF0Y2goJG5hdmlnYXRpb24pPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iNzUuNSw0MzEuNzEwOSw2NS41LDQzNS43MTA5LDc1LjUsNDM5LjcxMDksNzEuNSw0MzUuNzEwOSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjkuNSIgeDI9IjM3OC41IiB5MT0iNDM1LjcxMDkiIHkyPSI0MzUuNzEwOSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjcwIiB4PSI4MS41IiB5PSI0MzAuNjQ1Ij5wb3N0U3RhcnQoKTwvdGV4dD48cGF0aCBkPSJNMTgyLjUsNDUwLjcxMDkgTDI4MC41LDQ1MC43MTA5IEwyODAuNSw0NTcuNzEwOSBMMjcwLjUsNDY3LjcxMDkgTDE4Mi41LDQ2Ny43MTA5IEwxODIuNSw0NTAuNzEwOSAiIGZpbGw9IiNFRUVFRUUiIHN0eWxlPSJzdHJva2U6ICMwMDAwMDA7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMTA0LjUzMTMiIHN0eWxlPSJzdHJva2U6ICMwMDAwMDA7IHN0cm9rZS13aWR0aDogMi4wOyIgd2lkdGg9IjUwNi41IiB4PSIxODIuNSIgeT0iNDUwLjcxMDkiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9ImJvbGQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNTMiIHg9IjE5Ny41IiB5PSI0NjMuNzc3OCI+cmVkcmF3PC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iMzY3LjUsNDg0Ljk3NjYsMzc3LjUsNDg4Ljk3NjYsMzY3LjUsNDkyLjk3NjYsMzcxLjUsNDg4Ljk3NjYiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjIzNi41IiB4Mj0iMzczLjUiIHkxPSI0ODguOTc2NiIgeTI9IjQ4OC45NzY2Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9Ijg2IiB4PSIyNDMuNSIgeT0iNDgzLjkxMDYiPmgzLnJlZHJhdygpPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iMjQ3LjUsNTE0LjEwOTQsMjM3LjUsNTE4LjEwOTQsMjQ3LjUsNTIyLjEwOTQsMjQzLjUsNTE4LjEwOTQiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjI0MS41IiB4Mj0iMzc4LjUiIHkxPSI1MTguMTA5NCIgeTI9IjUxOC4xMDk0Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNTYiIHg9IjI1My41IiB5PSI1MTMuMDQzNSI+cmVkcmF3KCk8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI2NDQuNSw1NDMuMjQyMiw2NTQuNSw1NDcuMjQyMiw2NDQuNSw1NTEuMjQyMiw2NDguNSw1NDcuMjQyMiIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMzc5LjUiIHgyPSI2NTAuNSIgeTE9IjU0Ny4yNDIyIiB5Mj0iNTQ3LjI0MjIiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxMTgiIHg9IjM4Ni41IiB5PSI1NDIuMTc2MyI+ZGlzcGF0Y2goJHJlZHJhdyk8L3RleHQ+PHBhdGggZD0iTTEzLDU2OS4yNDIyIEwxMzcsNTY5LjI0MjIgTDEzNyw1NzYuMjQyMiBMMTI3LDU4Ni4yNDIyIEwxMyw1ODYuMjQyMiBMMTMsNTY5LjI0MjIgIiBmaWxsPSIjRUVFRUVFIiBzdHlsZT0ic3Ryb2tlOiAjMDAwMDAwOyBzdHJva2Utd2lkdGg6IDEuMDsiLz48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjIyMS4wNjI1IiBzdHlsZT0ic3Ryb2tlOiAjMDAwMDAwOyBzdHJva2Utd2lkdGg6IDIuMDsiIHdpZHRoPSI2NzYiIHg9IjEzIiB5PSI1NjkuMjQyMiIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI3OSIgeD0iMjgiIHk9IjU4Mi4zMDkxIj5uYXZpZ2F0aW9uPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iMzY3LjUsNjAzLjUwNzgsMzc3LjUsNjA3LjUwNzgsMzY3LjUsNjExLjUwNzgsMzcxLjUsNjA3LjUwNzgiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjIzNi41IiB4Mj0iMzczLjUiIHkxPSI2MDcuNTA3OCIgeTI9IjYwNy41MDc4Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjExOSIgeD0iMjQzLjUiIHk9IjYwMi40NDE5Ij5oMy5uYXZpZ2F0ZVRvKCk8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI0ODEuNSw2MzIuNjQwNiw0OTEuNSw2MzYuNjQwNiw0ODEuNSw2NDAuNjQwNiw0ODUuNSw2MzYuNjQwNiIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMzc5LjUiIHgyPSI0ODcuNSIgeTE9IjYzNi42NDA2IiB5Mj0iNjM2LjY0MDYiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI5MCIgeD0iMzg2LjUiIHk9IjYzMS41NzQ3Ij5wcm9jZXNzUGF0aCgpPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iNzUuNSw2NjEuNzczNCw2NS41LDY2NS43NzM0LDc1LjUsNjY5Ljc3MzQsNzEuNSw2NjUuNzczNCIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjkuNSIgeDI9IjQ5Mi41IiB5MT0iNjY1Ljc3MzQiIHkyPSI2NjUuNzczNCIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXN0eWxlPSJpdGFsaWMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMTQ4IiB4PSI4MS41IiB5PSI2NjAuNzA3NSI+cmVtb3ZlIGFsbCBET00gbm9kZXM8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSIyMjQuNSw2OTAuOTA2MywyMzQuNSw2OTQuOTA2MywyMjQuNSw2OTguOTA2MywyMjguNSw2OTQuOTA2MyIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjQuNSIgeDI9IjIzMC41IiB5MT0iNjk0LjkwNjMiIHkyPSI2OTQuOTA2MyIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXN0eWxlPSJpdGFsaWMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMTQ4IiB4PSI3MS41IiB5PSI2ODkuODQwMyI+cmVtb3ZlIGFsbCBET00gbm9kZXM8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSIyNDcuNSw3MjAuMDM5MSwyMzcuNSw3MjQuMDM5MSwyNDcuNSw3MjguMDM5MSwyNDMuNSw3MjQuMDM5MSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMjQxLjUiIHgyPSI0OTIuNSIgeTE9IjcyNC4wMzkxIiB5Mj0iNzI0LjAzOTEiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI1NCIgeD0iMjUzLjUiIHk9IjcxOC45NzMxIj5yZW5kZXIoKTwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjY0NC41LDc0OS4xNzE5LDY1NC41LDc1My4xNzE5LDY0NC41LDc1Ny4xNzE5LDY0OC41LDc1My4xNzE5IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI0OTMuNSIgeDI9IjY1MC41IiB5MT0iNzUzLjE3MTkiIHkyPSI3NTMuMTcxOSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjExOCIgeD0iNTAwLjUiIHk9Ijc0OC4xMDYiPmRpc3BhdGNoKCRyZWRyYXcpPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iNjQ0LjUsNzc4LjMwNDcsNjU0LjUsNzgyLjMwNDcsNjQ0LjUsNzg2LjMwNDcsNjQ4LjUsNzgyLjMwNDciIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjQ5My41IiB4Mj0iNjUwLjUiIHkxPSI3ODIuMzA0NyIgeTI9Ijc4Mi4zMDQ3Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMTM5IiB4PSI1MDAuNSIgeT0iNzc3LjIzODgiPmRpc3BhdGNoKCRuYXZpZ2F0aW9uKTwvdGV4dD48IS0tTUQ1PVszNTJkNDMxYjJlY2QyZjllZTQ4YTdkNmVmYzg5MDQzNl0KQHN0YXJ0dW1sCnRpdGxlIEgzIFNlcXVlbmNlIERpYWdyYW0KCmVudGl0eSBBcHBsaWNhdGlvbgpjb250cm9sIENvbXBvbmVudAplbnRpdHkgSDMKZW50aXR5IFJvdXRlcgpkYXRhYmFzZSBTdG9yZQoKQXBwbGljYXRpb24gLSAtPiBIMyA6IDxiPmgzLmluaXQoKTwvYj4KSDMgLT4gU3RvcmUgOiAvL2luaXRpYWxpemUvLwpTdG9yZSAtPiBTdG9yZSA6IC8vZXhlY3V0ZSBtb2R1bGVzLy8KSDMgLT4gU3RvcmUgOiBkaXNwYXRjaCgkaW5pdCkKSDMgLT4gQXBwbGljYXRpb24gOiBwcmVTdGFydCgpCkgzIC0+IFJvdXRlciA6IC8vaW5pdGlhbGl6ZS8vCkgzIC0+IFJvdXRlciA6IHN0YXJ0KCkKUm91dGVyIC0+IENvbXBvbmVudCA6IHJlbmRlcigpClJvdXRlciAtPiBTdG9yZTogZGlzcGF0Y2goJHJlZHJhdykKUm91dGVyIC0+IFN0b3JlOiBkaXNwYXRjaCgkbmF2aWdhdGlvbikKSDMgLT4gQXBwbGljYXRpb24gOiBwb3N0U3RhcnQoKQoKZ3JvdXAgcmVkcmF3CiAgICBDb21wb25lbnQgLT4gSDMgOiA8Yj5oMy5yZWRyYXcoKTwvYj4KICAgIEgzIC0+IENvbXBvbmVudCA6IHJlZHJhdygpCiAgICBIMyAtPiBTdG9yZTogZGlzcGF0Y2goJHJlZHJhdykKZW5kCgpncm91cCBuYXZpZ2F0aW9uCiAgICBDb21wb25lbnQgLT4gSDMgOiA8Yj5oMy5uYXZpZ2F0ZVRvKCk8L2I+CiAgICBIMyAtPiBSb3V0ZXIgOiBwcm9jZXNzUGF0aCgpCiAgICBSb3V0ZXIgLT4gQXBwbGljYXRpb24gOiAvL3JlbW92ZSBhbGwgRE9NIG5vZGVzLy8KICAgIEFwcGxpY2F0aW9uIC0+IENvbXBvbmVudCA6IC8vcmVtb3ZlIGFsbCBET00gbm9kZXMvLwogICAgUm91dGVyIC0+IENvbXBvbmVudCA6IHJlbmRlcigpCiAgICBSb3V0ZXIgLT4gU3RvcmU6IGRpc3BhdGNoKCRyZWRyYXcpCiAgICBSb3V0ZXIgLT4gU3RvcmU6IGRpc3BhdGNoKCRuYXZpZ2F0aW9uKQplbmQKQGVuZHVtbAoKUGxhbnRVTUwgdmVyc2lvbiAxLjIwMjAuMDhiZXRhMShVbmtub3duIGNvbXBpbGUgdGltZSkKKEdQTCBzb3VyY2UgZGlzdHJpYnV0aW9uKQpKYXZhIFJ1bnRpbWU6IEphdmEoVE0pIFNFIFJ1bnRpbWUgRW52aXJvbm1lbnQKSlZNOiBKYXZhIEhvdFNwb3QoVE0pIDY0LUJpdCBTZXJ2ZXIgVk0KSmF2YSBWZXJzaW9uOiAxNC4wLjErNwpPcGVyYXRpbmcgU3lzdGVtOiBMaW51eApEZWZhdWx0IEVuY29kaW5nOiBVVEYtOApMYW5ndWFnZTogZW4KQ291bnRyeTogVVMKLS0+PC9nPjwvc3ZnPg==" alt="Sequence Diagram" /></p> <p>When the <code>h3.init()</code> method is called at application level, the following operations are performed in sequence:</p>

@@ -7745,7 +7744,7 @@

<a name="API"></a> <h2>API<a href="#document-top" title="Go to top"></a></h2> -<p>The core of the H3 API is comprised of the following seven methods and two properties.</p> +<p>The core of the H3 API is comprised of the following six methods and two properties.</p> <a name="h3(selector:-string,-attributes:-object,-children:-array)"></a> <h3>h3(selector: string, attributes: object, children: array)<a href="#document-top" title="Go to top"></a></h3>

@@ -7857,13 +7856,6 @@ <li>The special <code>$key</code> attribute can be used to guarantee the uniqueness of two VNodes and it will not be translated into an HTML attribute.</li>

<li>The special <code>$html</code> attribute can be used to set the <code>innerHTML</code> property of the resulting HTML element. Use only if you know what you are doing!</li> </ul> - -<a name="h3.equal(a:-any,-b:-any)"></a> -<h3>h3.equal(a: any, b: any)<a href="#document-top" title="Go to top"></a></h3> - -<p>A way to determine if two object or literals are equal. This method is mainly used internally by the Virtual DOM diffing algorithm.</p> - -<p>Note that two functions are considered <em>equal</em> if their source code is exactly the same. This may not be ideal in certain situations, but when it comes to diffing two nodes that may be generated dynamically through iteration it generally makes sense to behave in this way.</p> <a name="h3.dispatch(message:-string,-data:-any)"></a> <h3>h3.dispatch(message: string, data: any)<a href="#document-top" title="Go to top"></a></h3>
M docs/example/assets/js/h3.jsdocs/example/assets/js/h3.js

@@ -166,6 +166,10 @@ this.attributes = data.attributes;

this.classList = data.classList; } + equalTo(obj) { + return equal(this, obj); + } + processProperties(attrs) { this.id = this.id || attrs.id; this.$key = attrs.$key;

@@ -695,10 +699,6 @@ "[h3.redraw] No application initialized, unable to update."

); } router.redraw(); -}; - -h3.equal = (...args) => { - return equal(...args); }; export default h3;
M docs/js/h3.jsdocs/js/h3.js

@@ -166,6 +166,10 @@ this.attributes = data.attributes;

this.classList = data.classList; } + equalTo(obj) { + return equal(this, obj); + } + processProperties(attrs) { this.id = this.id || attrs.id; this.$key = attrs.$key;

@@ -695,10 +699,6 @@ "[h3.redraw] No application initialized, unable to update."

); } router.redraw(); -}; - -h3.equal = (...args) => { - return equal(...args); }; export default h3;
M docs/md/api.mddocs/md/api.md

@@ -1,6 +1,6 @@

## API -The core of the H3 API is comprised of the following seven methods and two properties. +The core of the H3 API is comprised of the following six methods and two properties. ### h3(selector: string, attributes: object, children: array)

@@ -114,12 +114,6 @@ * The `classList` attribute can be set to a list of classes to apply to the element (as an alternative to using the element selector shorthand).

* The `data` attribute can be set to a simple object containing [data attributes](https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes). * The special `$key` attribute can be used to guarantee the uniqueness of two VNodes and it will not be translated into an HTML attribute. * The special `$html` attribute can be used to set the `innerHTML` property of the resulting HTML element. Use only if you know what you are doing! - -### h3.equal(a: any, b: any) - -A way to determine if two object or literals are equal. This method is mainly used internally by the Virtual DOM diffing algorithm. - -Note that two functions are considered _equal_ if their source code is exactly the same. This may not be ideal in certain situations, but when it comes to diffing two nodes that may be generated dynamically through iteration it generally makes sense to behave in this way. ### h3.dispatch(message: string, data: any)
M docs/md/overview.mddocs/md/overview.md

@@ -6,7 +6,7 @@ H3 is also:

- **tiny**, under [700 sloc](https://github.com/h3rald/h3/blob/master/h3.js). - **modern**, in the sense that it runs only in modern browsers (latest versions of Chrome, Firefox, Edge & similar). -- **easy** to learn, its API is comprised of only seven methods and two properties. +- **easy** to learn, its API is comprised of only six methods and two properties. ### I'm sold! Where can I get it?
M h3.jsh3.js

@@ -166,6 +166,10 @@ this.attributes = data.attributes;

this.classList = data.classList; } + equalTo(obj) { + return equal(this, obj); + } + processProperties(attrs) { this.id = this.id || attrs.id; this.$key = attrs.$key;

@@ -695,10 +699,6 @@ "[h3.redraw] No application initialized, unable to update."

); } router.redraw(); -}; - -h3.equal = (...args) => { - return equal(...args); }; export default h3;
A jest.config.js

@@ -0,0 +1,3 @@

+module.exports = { + setupFiles: ['<rootDir>/scripts/test-setup.js'], +}
M package.jsonpackage.json

@@ -5,7 +5,7 @@ "description": "A tiny, extremely minimalist JavaScript microframework.",

"main": "h3.js", "scripts": { "test": "jest", - "coverage": "jest --coverage && cat ./coverage/lcov.info | coveralls", + "coverage": "jest --env=jsdom --coverage && cat ./coverage/lcov.info | coveralls", "copy": "cp h3.js docs/js/h3.js && cp h3.js docs/example/assets/js/h3.js", "release": "node scripts/release.js", "guide": "hastyscribe docs/H3_DeveloperGuide.md",
A scripts/test-setup.js

@@ -0,0 +1,1 @@

+Object.defineProperty(window, "scrollTo", { value: () => {}, writable: true });